2012-11-15 8 views
9

タイトルに記載されているように、アプリにはScrollViewGestureDetectorもあります。 ScrollViewのタッチイベントの外では、左から右、右から左のようなスワイプアクションを処理するGestureDetectorがあります。彼らはすべてうまくいっています。ScrollViewでのGestureLibraryの使用

今、GestureLibraryを追加したいと思います。私はさまざまなソースを見て、何らかの形で適切に追加しました。私は(黄色の線)を望んでいたとして、それは図面の

<android.gesture.GestureOverlayView 
    android:id="@+id/gOverlay" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ScrollView 
     android:id="@+id/content_scroll" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:scrollbars="none"> 

      </ScrollView> 
      <!-- Other views --> 
</android.gesture.GestureOverlayView> 

が、それは任意のメソッドをトリガいない:単純に、レイアウトは、このように見ています。ここで私はOnGesturePerformedListenerを実装する方法:

/* 
    * Gestures 
    */ 
    gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
    if (!gLibrary.load()) { finish(); } 
    GestureOverlayView gestureOverlayView = (GestureOverlayView) findViewById(R.id.gOverlay); 
    gestureOverlayView.addOnGesturePerformedListener(gestureListener); 

そして、ここではgestureListener次のとおりです。

private OnGesturePerformedListener gestureListener = new OnGesturePerformedListener() { 
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { 
     ArrayList<Prediction> predictions = gLibrary.recognize(gesture);    
     if (predictions.size() > 1) { 
      for(Prediction prediction: predictions){ 
       Log.d("Test", "Looking for gestures"); 
      } 
     } 
    } 
}; 

すべてですこと。ウォールでは、私はこのアクティビティでScrollViewがなく、うまく動作しているこのソースコードを試してみました。それは、検出器を用いてどのようにアプリですので

最後に、私は、それがGestureDetectorについてですよく分からない:

public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (detector != null) { 
     if (detector.onTouchEvent(ev)) { 
      return true; 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

そして、私のSwipeDetector:私のアプローチと間違って何

private class SwipeDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    public boolean onFling(android.view.MotionEvent e1, android.view.MotionEvent e2, float velocityX, float velocityY) { 
     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) { return false; } 
     if(e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { filterButton.performClick();return true; }   
     return false; 
    } 
} 

答えて

8

アンドロイドのすべてのタッチイベントは、子供から親に移動します。したがって、スクロールビューはすべてのタッチイベントを処理し、ジェスチャ検出器はそれらを受信しません。あなたはScrollViewにタッチリスナーを設定することができます:あなたは、スクロールをチェックする必要が

scrollView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (detector != null) { 
       return detector.onTouchEvent(event); 
      return false; 
     } 
    }); 

は、必要に応じて働き、そしてあなたは、スクロールイベントを消費しません。

+0

「検出器」とは何ですか?それはSwipeDetectorオブジェクトですか? –

+0

@RahulHawge、 "検出器"はGestureDetectorオブジェクトです。 – strizzwald

関連する問題