2012-03-23 87 views
0

如果我想讓OnTouch事件自行重演,最佳解決方案是什麼? 例如,如果我將手指放在屏幕上,我希望整數增加1,直到我將手指從屏幕上移開?Android - OnTouch重複動作

編輯:感謝您的回覆:) 我可以用類似的方式處理畫布嗎?

回答

2

創建一個計時器,計劃每秒運行一次。保持運行,並在每次運行時增加計數器。手指鬆開時停止計時器。

2

結帳MotionEvent.ACTION_DOWN,並在這裏計數。 MotionEvent.ACTION_UP停止你的櫃檯。

2

擴展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; 
    } 
}  
+0

但不OnTouchListener當只有被調用變化?就像我移動手指的字詞或下劃線一樣?所以在任何動作發生之前它都不會達到if(flag)? – Araw 2012-03-23 12:32:13

+0

檢查更新是否無效。 – noob 2012-03-23 13:09:59