2012-06-07 17 views
7

Son birkaç saattir kafamı kırıyordum, google'dan cehennemden dışarı googledim ve StackOverflow'taki örneklerin hiçbiri ya da benim için çalışılan diğer yerlerden hiçbiri burada kalmıyor ...Düğmeleri ile özel görünümü uygular OnGestureListener

Özel bir görünümüm var, bu extends LinearLayout and implements GestureDetector.OnGestureListener.

Özel düzenimde, her biri bir tıklama dinleyicisi olan 3 Düğme var. İstediğim şey, bir şeyi gerçekleştirmek için görünümde her yerde Fling yapabilmenin yanı sıra düğmelere tıklayabilmeniz.

OnFling işlevi harika çalışıyor ancak bu düğmelerden birini değil, görünümde dolaşıyorsam. Düğmelerden birini aşarsam, çoğu durumda bir tıklama yapar veya bazılarında hiçbir şey yapmaz.

İşte benim kod ilgili bölümü:

@Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { 
      return false; 
     } 
     // right to left swipe 
     if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      viewFlipper.setInAnimation(slideLeftIn); 
      viewFlipper.setOutAnimation(slideLeftOut); 
      viewFlipper.showNext(); 
      return true; 

     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      viewFlipper.setInAnimation(slideRightIn); 
      viewFlipper.setOutAnimation(slideRightOut); 
      viewFlipper.showPrevious(); 
      return true; 
     } 

     return false; 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (gestureDetector.onTouchEvent(event)) { 
      return gestureDetector.onTouchEvent(event); 
     } 
     return false; 
    } 

gerçek getiri herhangi bir kombinasyonunu çalıştı; yanlış dönüş; Düşünebilirim ... Herhangi bir yardım için minnettarım! :)

Teşekkürler! Üstte SurfaceView ile http://developer.android.com/reference/android/view/SurfaceView.html

, senin düğmeleri hala çalışması gerekir ve fling'iniz herhangi olmadan düğmelerin üzerinde elde edebilmek olmalıdır:

cevap

3

tarif ettiğiniz (Sorumun sadece modifiye kodu) ... sonunda benim için çözüldü şeylerle alakalı olabilecek bir cevap değil.

@Override 
    public boolean onDown(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

@Override 
    public boolean onTouchEvent(MotionEvent e) { 
     return gestureDetector.onTouchEvent(e); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent e) { 
     return onTouchEvent(e); 
    } 

Bu Bunun arkasında düğmeleri ile başka bir görünüm varsa düğmeleri AMA basit tıklama izin de hatta düğmelerin üzerinde, binicisini jest izin verecektir: En iyi çözüm ama eğer çalışırsa emin değil görünüm, bazen tıklamalar geriye doğru geçecek ve görünümün arkasındaki düğmeleri tıklayın. Bunun için çözüm, ön görünümün kök düzenine (LinearLayout, FrameLayout veya neyse) "android:clickable="true"'u eklemektir.

0

Belki de tüm fling'iniz ele wich SurfaceView kullanarak Katman ayarlayabilirsiniz sorunları.

+0

Yanıtladığınız için teşekkürler, ancak SurfaceView'ı bunun için tasarlanmadığını ve esas olarak benim sorunumun doğru yöntemleri "doğruyu döndürmek, yanlış döndürmek" doğru yöntemlerle yapılması nedeniyle kullanılmasını tercih ediyorum. –