今天有需求是要监听一个按键的单击双击以及长按事件,在网上找了很多demo但是都不是特别理想啊.不过后来总算是看别人的代码看出了一点思路.由于本人是菜鸟,可能会有各种问题或者讲得不对的原因,希望大家见谅,共同进步.
废话不多讲,代码如下:protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.idbt);
bt.setOnClickListener(this);
bt.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "长按事件", Toast.LENGTH_SHORT)
.show();
return true;
}
});
}这里是初始化bttton.longclick绑定监听后若有执行返回true是不让系统往下继续执行.
@Override
public void onClick(View v) {
chooseNowState();
}
private long firstTime;
private void chooseNowState() {
// TODO Auto-generated method stub
if (firstTime == 0) {
firstTime = System.currentTimeMillis();
// 单击
handler.sendEmptyMessageDelayed(1, 1000);
} else {
if (System.currentTimeMillis() - firstTime < 800) {
// 双击
handler.removeMessages(1);//要取消掉上个正在准备发送的消息.
handler.sendEmptyMessage(2);
}
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
Toast.makeText(MainActivity.this, "单击咯", Toast.LENGTH_SHORT).show();
firstTime = 0;
break;
case 2:
Toast.makeText(MainActivity.this, "双击咯", Toast.LENGTH_SHORT).show();
firstTime = 0;
break;
default:
break;
}
};
};通过handler的方式去判断800ms内有没有第二下按下.若没有1s后执行单击事件,否则执行双击.
第一次发帖,虽然现在还是菜鸟,但是本着一颗程序员要乐于分享的精神,希望大家共同进步.