2012-03-23 56 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