2012-02-28 69 views
3

我在檢測我的應用程序中的手勢有問題。 我的佈局由一個GridView,幾個TextViews和按鈕組成。Android - GridView - 手勢檢測器不起作用

我實現OnGestureListener:

在OnCreate中
public class MyActivity extends Activity implements OnGestureListener{ 
private GestureDetector myGesture ; 

則:

myGesture = new GestureDetector(this); 

和覆蓋方法:

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    return myGesture.onTouchEvent(event); 
} 

}

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    // TODO Auto-generated method stub 
    try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      return false; 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //right to left fling 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //left to right fling 
     } 
    } catch (Exception e) { 
     // nothing 
    } 
    return false; 
} 

這實際上效果很好,但不在GridView上。我在GridView之外的任何位置執行投擲,它都可以工作。在GridView上 - 絕對沒有任何反應。 我幾乎不知道該怎麼辦,所以先謝謝任何幫助。

+0

你的gridView(或裏面的視圖)有一個消費事件的onClickListener? – ByteMe 2012-02-28 18:58:04

+0

是的,GridView的單元格有onClickListener – ThunderSS 2012-03-02 13:20:05

回答

1

我居然發現了另一個解決方案,因爲這樣我試圖這樣做只是沒有工作,沒有人知道爲什麼。我使用了GestureOverlayView,而且效果很好。只需將兩個輕掃手勢添加到手勢庫。

+1

你好,請你給我看一下GestureOverlayView的例子謝謝 – 2012-07-04 10:30:19

1

afaik一個gridview自動添加ScrollView功能,他們攔截手勢檢測。你將不得不實現你自己的GridView來覆蓋那個行爲,並且增加了跳躍檢測。在stackoverflow和其他網站上有很多ScrollView的例子。只要爲GridView做類似的方法。

+0

感謝回答如此之快。我添加了新的類,它擴展了GridView,並將我的活動中的所有GridViews更改爲GestureGridView(我的新類),但現在我得到ClassCastException:android.widget.Gridview。我很尷尬,我是否應該沒有將所有GridViews更改爲GestureGridViews?那麼什麼都沒發生我會很感激每一個幫助。 – ThunderSS 2012-03-02 12:50:36

+0

我想我找到了上面給出的錯誤的解決方案 - 我只是沒有更改.xml文件。但是,我做了之後,我有兩個新的錯誤 - 第一個是android.view.InflateException:二進制XML文件行#44:錯誤膨脹類pl.flamis.Kalendarz $ GestureGridView和第二個:java.lang.NoSuchMethodException: GestureGridView(上下文,AttributeSet中)。有任何想法嗎? – ThunderSS 2012-03-02 14:30:02

+0

你可能沒有創建重載的構造函數。 – 2012-03-02 17:45:48

2

當事件被消耗時(如下所示),你是否返回true?

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    // TODO Auto-generated method stub 
    try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      return false; 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //right to left fling 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //left to right fling 
     } 
     return true; 
    } catch (Exception e) { 
     // nothing 
    } 
    return false; 
} 
+0

我其實沒有,但添加它並沒有改變一件事。無論如何感謝您的答案! – ThunderSS 2012-03-02 12:57:54