2013-10-17 145 views
0

我无法在网上找到任何帮助来向我描述为什么“ACTION_DOWN”的延迟不起作用。只要我触摸图像,我的代码的其余部分就会执行。我的意图是放置在//附加代码和//结束附加代码注释之间。它是否需要放置在其他地方?提前致谢!OnTouchListener延迟不起作用

编辑:我会使用onLongClickListener,但我的目的是延长对象为了意图开始的时间。

mImage = (ImageView)MainActivity.this.findViewById(R.id.Floaterimg); 
    mImage.setOnTouchListener(new View.OnTouchListener() { 

     final Handler handler2 = new Handler(); 
     Runnable mLongPressed = new Runnable() { 
      public void run() { 
       Log.i("", "Long press!"); 

      } 
     }; 
      @Override 
      public boolean onTouch(View v, MotionEvent event){ 
       if(event.getAction() == MotionEvent.ACTION_DOWN) 
        handler2.postDelayed(mLongPressed, 3000); 

            //additional code 
            //end of additional code 

       if((event.getAction() == MotionEvent.ACTION_MOVE)|| 
(event.getAction() == MotionEvent.ACTION_UP)) 
        handler2.removeCallbacks(mLongPressed); 
        return false;  
      } 
     }); 
+0

你有没有想过在3000毫秒之前执行ACTION_MOVE并删除回调? – Diego

+0

我该如何解决这个问题?忍受着我,我只在一个星期左右的时间里涉足Android开发。 我把你的评论意味着我可能会无意中移动我的手指,所以我删除了MotionEven.ACTION_MOVE,但效果相同。 –

+0

尝试在第二个条件中移除'event.getAction()== MotionEvent.ACTION_MOVE',并检查Runnable是否被执行。 – Diego

回答

3

你为什么不使用mImage.setOnLongClickListener()?

+0

因为,as据我所知,在OnLongClickListener启动意图之前,您无法更改按下对象所需的时间。如果你能这样做会是一个很好的解决方案。 –

+1

这里是工作,我可以看到与你的代码的区别是,如果你正在返回false,并且你正在检查ACTION_MOVE而不是ACTION_CANCEL。另一个区别是你的runnable在actionListener中。希望能帮助到你。 http://stackoverflow.com/questions/16393530/how-to-customize-the-time-interval-of-long-delay-button-pressed-in-android – Diego

+0

我看着在那里发布的答案。如果不在actionListener中,runnable应该去哪里? –

1

使用setOnLongClickListener,而不是另起炉灶

+0

因为,据我所知,在OnLongClickListener启动意图之前,您无法更改按下对象所需的时间。如果你能这样做会是一个很好的解决方案。 –

+0

在这里看到他们是如何实现GestureDetector的https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/GestureDetector.java,你可以复制它并修改长按tout – pskink