讲师博文
安卓开发中实用的例子 来源 : 未知     2018-09-21

我们在实际开发中经常会需要按键,但是如果像平时使用OnClickListener 来监听的话,其实是不能满足我们的需求的,比如要做一个按键的秒表app,按下开始计时,放开停止计时,如果用上面的OnClickListener监听器来监听,只能监听到按键抬起时的动作,那么按下抬起动作分开监听的话如何实现,这里作者自己实现的一个方法,大家可以参考。

Java Code

textView = (TextView) findViewById(R.id.textView1);

button = (Button) findViewById(R.id.button1);

ButtonListener b = new ButtonListener();

button.setOnClickListener(b);

button.setOnTouchListener(b);

handler = new Handler()

{

@Override

public void handleMessage(Message msg)

{

// TODO Auto-generated method stub

super.handleMessage(msg);

if(msg.what == 0x1234)

{

textView.setText("计时:" + msg.obj + " 秒");

}

}

};

这里我们利用内部类去从写了两个监听器里的方法,以便比较,一个是上面所讲的OnClickListener,另一个是实现我们监听按下抬起两个动作的OnTouchListener,内部类的代码如下:

Java Code

class ButtonListener implements OnClickListener, OnTouchListener

{

public void onClick(View v)

{

if(v.getId() == R.id.button1)

{

Log.d("test", "cansal button ---> click");

Toast tst = Toast.makeText(MainActivity.this, "33333333",

Toast.LENGTH_SHORT);

tst.show();

}

}

public boolean onTouch(View v, MotionEvent event)

{

if(v.getId() == R.id.button1)

{

if(event.getAction() == MotionEvent.ACTION_DOWN) //判断动作,如果是按下的话,置位标志位,开启线程

{

state = true;

new MyThread().start();

}

if(event.getAction() == MotionEvent.ACTION_UP) //如果是抬起,则将标志位复位,使线程退出

{

state = false;

}

}

return false;

}

}

因为这里我们要实现一个按下开始计时,抬起停止计时功能,所以计时功能需要在一个线程里去实现,这里使用handler-message实现,方法如下:

Java Code

class MyThread extends Thread

{

@Override

public void run()

{

// TODO Auto-generated method stub

super.run();

while(state)

{

try

{

Thread.sleep(1000);

}

catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

Message message = new Message();

message.what = 0x1234;

message.obj = count++;

handler.sendMessage(message);

//handler.sendEmptyMessage(0x1234);

}

}

}

线程里1秒count加一次,并将count数字传到handler中,去更新textview内容,此方法稳定可行,系统资源占用少,用在其他项目中有不错的效果。

运行结果:

按下时

抬起时

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:Logo

下一篇:智能手环客户端详细设计

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号