的Android定制的双抽头位置

问题描述:

我目前正在创建使用onClickListener用下面的代码自定义双击:的Android定制的双抽头位置

newImage.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View arg0) { 
counterTap++; 

Timer t = new Timer("Double tap counter"); 
t.schedule(new TimerTask() { 

@Override 
public void run() { 
counterTap = 0; 
} 
}, 0, 300); 

if(counterTap >= 2) { 
newImage.setVisibility(FrameLayout.GONE); 
counterTap = 0; 
} 

} 
}); 

我面对的问题如下:

每当我挖掘ImageView事件确实触发。但是,第二次点击ImageView时,上述代码仅在点击ImageView上的完全相同位置时才执行。

+0

为什么你就不能使用Android GestureDetector? – Blackbelt 2013-03-19 11:37:32

+0

@blackbelt是对的。使用手势检测器。已经有一个处理双击 – Neil 2013-03-19 11:52:14

+0

我尝试使用GestureDetector很好,但我现在面临相同问题的方法。似乎第二次敲击必须与第一次敲击的位置完全相同,即使我将侦听器添加到ImageView中。 – James 2013-03-19 12:35:48

而是使用onTouchListener。在onTouch方法触摸监听器,你可以返回false你第一次挖掘,这意味着没有处理的情况下,你第二次返回true并且完成了触摸监听器将处理该事件。见我例如下面,你可以使用一个类似方法

new OnTouchListener() { 
    boolean doubleTap = false; 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 
      if (!doubleTap) { 
       doubleTap = true; 
       return false; 
      } else { 
       return true; 
      } 
     } 
    } 
}; 

这可能会解决您的问题。

编辑:这是一个更好的opotion

private class GestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 

    // double tap event 
    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     return true; 
    } 
} 

This问题也可能会有助于你得到最好的答案

+0

我会给那个onTouch一个尝试。不过,我正面临与GestureListener的onDoubleTap完全相同的问题。第二次敲击必须与第一次敲击的位置完全相同。我希望用户能够在ImageView的任何位置双击。 图片澄清我的意思:[CLICK](http://i.imgur.com/LUsmopG.png) 当用户轻敲位置1,然后在位置2,也不会注册doubletap。 – James 2013-03-19 12:42:59

+0

我看到Instagram就像那样。你必须在同一个位置上双击。我认为这样做可能更好。祝你好运 – Neil 2013-03-19 12:45:26