如果我想讓OnTouch事件自行重演,最佳解決方案是什麼? 例如,如果我將手指放在屏幕上,我希望整數增加1,直到我將手指從屏幕上移開?Android - OnTouch重複動作
編輯:感謝您的回覆:) 我可以用類似的方式處理畫布嗎?
如果我想讓OnTouch事件自行重演,最佳解決方案是什麼? 例如,如果我將手指放在屏幕上,我希望整數增加1,直到我將手指從屏幕上移開?Android - OnTouch重複動作
編輯:感謝您的回覆:) 我可以用類似的方式處理畫布嗎?
創建一個計時器,計劃每秒運行一次。保持運行,並在每次運行時增加計數器。手指鬆開時停止計時器。
結帳MotionEvent.ACTION_DOWN
,並在這裏計數。 MotionEvent.ACTION_UP
停止你的櫃檯。
擴展ohdroid的答案:
你可以有一個boolean
變量,它需要初始化時被設置爲false。當調用MotionEvent.ACTION_DOWN
時,將其設置爲true,並將計數器遞增代碼放入一個if塊中,該塊將檢查布爾變量的值作爲條件。在MotionEvent.ACTION_UP
中將該值再次設置爲false。
代碼示例:
View#setOnTouchListener(new OnTouchListner(){
int counter=0;
boolean flag=false;
public void onTouch(View view,MotionEvent event){
if(event==MotionEvent.ACTION_DOWN){
flag=true;
}
if(event==MotionEvent.ACTION_UP){
flag=false;
}
if(flag){
counter++;
}
}
});
編輯:如果上面的代碼不能正常工作,然後再嘗試它採用AsyncTask
如下:
boolean flag=false;
RunTask task=new RunTask();
int counter=0;
View#setOnTouchListener(new OnTouchListner(){
public void onTouch(View view,MotionEvent event){
if(event==MotionEvent.ACTION_DOWN){
flag=true;
task.execute(MyActivity.this);
}
if(event==MotionEvent.ACTION_UP){
flag=false;
task.cancel(true);
}
}
});
class RunTask extends AsyncTask<MyActivity,Integer, Integer>{
protected Integer doInBackground(MyActivity... params) {
while(params[0].flag)
counter++;
return counter;
}
}
但不OnTouchListener當只有被調用變化?就像我移動手指的字詞或下劃線一樣?所以在任何動作發生之前它都不會達到if(flag)? – Araw 2012-03-23 12:32:13
檢查更新是否無效。 – noob 2012-03-23 13:09:59