2015-07-09 5 views
1

Я пытаюсь написать пользовательский Behavior, который должен будет перехватить события касания. documentation говорит, что я должен вернуть true из onInterceptTouchEvent(), чтобы захватить поток событий, а затем вернуть значение true от onTouchEvent() до тех пор, пока я хотел бы продолжать получать события. Когда я это делаю, получаются только ACTION_DOWN и ACTION_CANCEL события.Пользовательский координаторLayout Поведение теряет сенсорный поток ввода после первого события

Вот как я зацепил все вверх:

//============================================================================== 
public class CustomBehavior extends CoordinatorLayout.Behavior<View> { 
    //-------------------------------------------------------------------------- 

    public CustomBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     Log.d("AppTag", "SlidingCardBehavior"); 
    } 

    //-------------------------------------------------------------------------- 

    @Override public boolean onInterceptTouchEvent(CoordinatorLayout coordinator, View child, MotionEvent event) { 

     Log.d("AppTag", "onInterceptTouchEvent() " 
      + MotionEvent.actionToString(event.getAction())); 

     return true; 
    } 

    //-------------------------------------------------------------------------- 

    @Override public boolean onTouchEvent(CoordinatorLayout coordinator, View child, MotionEvent event) { 

     Log.d("AppTag", "onTouchEvent() " 
      + MotionEvent.actionToString(event.getAction())); 

     return true; 
    } 

    //-------------------------------------------------------------------------- 
} 
//------------------------------------------------------------------------------ 

Layout XML:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context=".HomeActivity"> 

    <FrameLayout android:id="@+id/back" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.v7.widget.CardView 
     android:id="@+id/front" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 

     app:layout_behavior="tv.shuriken.android.behavior.CustomBehavior" /> 

</android.support.design.widget.CoordinatorLayout> 

Когда я проверить это, ACTION_DOWN принимается, как ожидалось, но не ACTION_MOVE или ACTION_UP событий нет. Когда я снова касаюсь, я сразу получаю ACTION_CANCEL, а затем еще ACTION_DOWN.

В документации это звучит так просто, я убежден, что что-то пропустил. Как получить непрерывный поток событий в onTouchEvent()?

ответ

2

Попробуйте добавить clickable = "true" к своему пользовательскому виду в xml. Также не перехватывайте первый ACTION_DOWN, перехватите ACTION_MOVE.