brown = (Button) findViewById(R.id.brownButton);
brown.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
count++;
Log.d("count", "" + count);
return true;
} else if (event.getAction() == (MotionEvent.ACTION_UP)) {
count--;
Log.d("count", "" + count);
return true;
}
return false;
}
});
当我的手指按下并按住按钮时,我的计数只会增加一次。当我放手时它会相应减少。请有人告诉我,只要我的手指按住按钮,我就可以让代码增加。谢谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
触控侦听器的工作原理如下:
它收到一个ACTION_DOWN事件(用户触摸)
然后接收所有以下事件(如果返回true)并将以下所有事件视为ACTION_MOVE事件
触摸lisetener一直接收ACTION_MOVE事件,直到收到ACTION_UP或ACTION_CANCEL事件。
所以ACTION_DOWN只触发一次,然后触发任意数量的ACTION_MOVE事件,然后是单个ACTION_UP或ACTION_CANCEL。
如果您希望计数器增加,则需要检查ACTION_MOVE事件。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//do something on DOWN
break;
case MotionEvent.ACTION_MOVE:
//do something on MOVE
break;
case MotionEvent.ACTION_UP:
//do something on UP
break;
}
return true;
}
答案 2 :(得分:1)
我也需要这样做,但这个问题从来没有得到充分的回答,即使它已经相当陈旧了。但是,可以在此处找到一个好的解决方案:android repeat action on pressing and holding a button
我正在针对这个问题调整解决方案。我测试了它,它对我有用。
Button brown = (Button) findViewById(R.id.brownButton);
brown.setOnTouchListener(new View.OnTouchListener() {
private Handler mHandler;
private int count = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mHandler != null)
return true;
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
break;
case MotionEvent.ACTION_UP:
if (mHandler == null)
return true;
mHandler.removeCallbacks(mAction);
mHandler = null;
break;
}
return true; // before I had written false
}
Runnable mAction = new Runnable() {
@Override
public void run() {
Log.d("count: ", "" + count);
count++;
mHandler.postDelayed(this, 500);
}
};
});
将来我会将此解决方案应用于自定义软键盘,以便空格键和删除键在按住时继续工作。
更新:今天我终于开始制作连续删除密钥了。我之前认为我已经测试了上面的代码,但今天当我这样做时,我必须从true
方法返回onTouch
才能使其工作。