2013-06-09 5 views
2

Я хочу иметь оверлейный вид для получения событий жестов, но все равно продолжаю получать событие onTouch родительского (ниже) представления. Тем не менее, Жест в детском представлении кажется скрыть родительский onTouch событие.Добавить прослушиватель жестов в дочерний вид, не скрывая события касания родителя

Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <ParentView 

      android:background="#FFFFFF" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <ChildView android:background="#FF4433" 
        android:orientation="horizontal" 
        android:layout_width="fill_parent" 
        android:layout_height="200dp" android:layout_marginTop="100dp"> 

     </ChildView> 

    </ParentView> 
</LinearLayout> 

Родитель Вид:

public class ParentView extends FrameLayout implements View.OnTouchListener { 
    public ParentView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setOnTouchListener(this); 
    } 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     Logger.write("Parent is touching"); 
     return false; 
    } 
} 

Client Вид:

public class ChildView extends FrameLayout implements View.OnTouchListener { 
    private GestureDetector myGestureDetector; 
    private boolean isTapping; 

    public ChildView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     myGestureDetector=new GestureDetector(context, new MyGestureDetector()); 
     setOnTouchListener(this); 
    } 


    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     return myGestureDetector.onTouchEvent(event); 
    } 

    class MyGestureDetector extends GestureDetector.SimpleOnGestureListener { 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true;  
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      try { 
       final ViewConfiguration vc = ViewConfiguration.get(getContext()); 
       final int swipeMinDistance = vc.getScaledPagingTouchSlop(); 
       final int swipeMaxOffPath = vc.getScaledTouchSlop(); 
       final int swipeThresholdVelocity = vc.getScaledMinimumFlingVelocity()/2; 
       if (Math.abs(e1.getY() - e2.getY()) > swipeMaxOffPath) { 
        return false; 
       } 

       // right to left swipe 
       if (e2.getX() - e1.getX() > swipeMinDistance && Math.abs(velocityX) > 
         swipeThresholdVelocity) { 
        Logger.write("Swipe!!!!!!!!!!!!!!!!!!!!!!!"); 

       } 
      } catch (Exception e) { 
       // nothing 
      } 

      return false; 
     } 
    } 
} 

ответ

3

Реализовать GestureDetector в родителю не в связи с детьми, в противном случае вам нужно будет п детекторов, если родитель n просмотров.

+0

ссылка на ваш ответ в [этот вопрос] (https://stackoverflow.com/questions/45070129/detecting-common-gestures-on-multiple-views-in-android) – Suragch

 Смежные вопросы

  • Нет связанных вопросов^_^