【问题标题】:Android - OnTouch repeat actionAndroid - OnTouch 重复动作
【发布时间】:2012-03-23 12:09:20
【问题描述】:

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

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

【问题讨论】:

    标签: android multithreading asynchronous handler


    【解决方案1】:

    创建一个计时器,计划每秒运行一次。保持它运行并在每次运行时增加你的计数器。松开手指时停止计时器。

    【讨论】:

      【解决方案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;
          }
       }    
      

      【讨论】:

      • 但是 OnTouchListener 不是只有在有变化时才被调用吗?就像我向上或向下移动手指一样?所以它不会在任何运动发生之前到达 if(flag) 吗?
      【解决方案3】:

      查看MotionEvent.ACTION_DOWN,并在此处数数。 MotionEvent.ACTION_UP 停止您的柜台。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        相关资源
        最近更新 更多