Android - OnTouch重复操作

时间:2012-03-23 12:09:20

标签: android multithreading asynchronous handler

如果我想让OnTouch事件重演,最佳解决方案是什么? 例如,如果我将手指放在屏幕上,我想要一个整数增加1,直到我从屏幕上移开手指?

编辑:谢谢你的回复:) 我可以用类似的方式处理画布吗?

3 个答案:

答案 0 :(得分:2)

创建一个计划每秒运行一次的计时器。保持运行并在每次运行时递增计数器。释放手指时停止计时器。

答案 1 :(得分:2)

结帐MotionEvent.ACTION_DOWN,并点击此处。 MotionEvent.ACTION_UP停止你的柜台。

答案 2 :(得分: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;
    }
 }