[英]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.