[英]Button with OnTouchListener that continuously does something while held down in Android Studio
[英]OnTouchListener() will only execute once while button is pressed and held down
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;
}
});
当我的手指按下并按住按钮时,我的计数只会增加一次。 当我放开时,它会相应减少。 请有人告诉我,只要手指按住按钮,我如何才能使代码递增。 谢谢。
我也需要这样做,但这个问题从来没有得到充分的回答,即使它已经相当陈旧了。 但是,可以在这里找到一个好的解决方案: android在按住按钮时重复操作
我正在针对该问题调整该解决方案。 我测试了它,对我有用。
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);
}
};
});
将来我会将此解决方案应用于自定义软键盘,以便空格键和删除键在按下时继续工作。
更新:今天我终于开始制作连续删除键了。 我以为以前已经测试过上面的代码,但是今天当我在做上面的代码时,我必须从onTouch
方法返回true
才能使它工作。
触摸侦听器的工作方式如下:
它收到一个ACTION_DOWN事件(用户触摸)
然后,它接收以下所有事件(如果返回true),并将以下所有事件视为ACTION_MOVE事件
触摸修饰器将继续接收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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.