您的位置:首页 > 移动开发 > Android开发

android按键连续按下事件处理

2014-09-15 17:15 369 查看
android中有Button控件,针对Button控件有2个非常经典的处理事件那就是1、OnClick,即普通点击事件。

2、长按键事件,即当按键长时间被按下触发的一个事件。

但是我们实际处理中仅仅有他们可能不一定能完全满足我们的需求,例如:

游戏开发中一个移动按键,我们如果要实现按下按键物理持续移动,一直到我们松开按键物体才停止移动。

明显上述的需求,如果用我们的OnClick明显不能满足我们需求,因为必须按一下按键后松开才会触发OnClick,

而长按键事件,则只会触发一次,他也无法判断我们到底什么时候松开,即无法判断我们什么时候才停止移动。

针对上面我们谈到的移动按键需求,我的实现方式如下:

1、对按键进行触摸事件的监测

2、当监测到ACTION_DOWN时,开始开启一个线程一直执行我们的移动动作(当然要有一定睡眠延时)

3、当监测到ACTION_UP时,则将线程给结束

说了这么多原理,屌丝程序员早就不耐烦了吧,好吧那就直接上代码:

public boolean onTouch(final View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

isUp = false;

if(isTimeout == true)

{

new Thread(new Runnable() {

@Override

public void run() {

while (!isUp) {

if (gameView != null)

{

switch (v.getId()) {

case R.id.up:

gameView.upMove();

break;

case R.id.shot:

gameView.shot();

break;

case R.id.down:

gameView.downMove();

break;

case R.id.left:

gameView.leftMove();

break;

case R.id.right:

gameView.rightMove();

break;

}

}

if(v.getId()!=R.id.shot)

{

isTimeout = false;

try {

Thread.sleep(150);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

isTimeout =true;

}

}

}).start();

}

break;

case MotionEvent.ACTION_UP:

isUp = true;

break;

default:

break;

}

return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: