2012-11-15 26 views
9

Başlıkta belirttiğim gibi, uygulamanın da bir ScrollView ve GestureDetector vardır. ScrollView’un dokunma olaylarının dışında, GestureDetector ile soldan sağa ve sağdan sola kaydırma işlemleri gerçekleştirebilirsiniz. Hepsi iyi çalışıyor.ScrollView ile GestureLibrary Kullanma

Şimdi bir GestureLibrary -I ortalama ham - Aktivite eklemek istiyorum. Farklı kaynaklara baktım ve bir şekilde düzgün ekledim. Ben (sarı çizgi) istediği gibi çekiyor

<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> 

ancak herhangi yöntemleri teşvik etmiyor: Basitçe, düzen böyle bakıyor.

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

Ve burada gestureListener geçerli:: İşte OnGesturePerformedListener uygulanan nasıl hepsi

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"); 
      } 
     } 
    } 
}; 

. Duvar tarafından, bu kaynak kodunu ScrollView olmayan ve iyi çalışan farklı bir Etkinlik ile denedim. O dedektör kullanılarak nasıl uygulama yani

Son olarak, bu GestureDetector hakkında emin değilim:

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

Ve benim SwipeDetector: my yaklaşımla nesi var

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; 
    } 
} 

?

cevap

8

Android'deki tüm dokunma olayları, çocuklardan ebeveynlere gider. Bu nedenle, kaydırma görünümü tüm dokunma olaylarını ele alır ve sizden jest dedektörü bunları almaz. O kaydırma gerektiğinde çalışır kontrol etmek zorunda

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

ve kaydırma etkinliklerinin tüketilen yoktur: Sen ScrollView dokunmatik dinleyici ayarlayabilirsiniz.

+0

Bu "dedektör" nedir? SwipeDetector nesnesi mi? –

+0

@RahulHawge, "detektör" GestureDetector nesnesidir. – strizzwald

İlgili konular