2013-03-19 68 views
0

我目前正在創建使用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

回答

2

而是使用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