2

Behaviorタッチ イベントをインターセプトする必要があるカスタムを作成しようとしています。ドキュメントonInterceptTouchEvent()には、イベント ストリームを引き継ぐためにtrue を返す必要があると記載onTouchEvent()されています。これを行うACTION_DOWNと、ACTION_CANCELイベントのみが受信されます。

すべてを接続した方法は次のとおりです。

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

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

レイアウト 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_MOVEACTION_UPイベントはありません。もう一度触れると、すぐに が表示され、ACTION_CANCEL次に別のが表示されACTION_DOWNます。

ドキュメンテーションはとてもシンプルに聞こえるので、何かを見逃していると確信しています。で継続的なイベント ストリームを取得するにはどうすればよいonTouchEvent()ですか?

4

1 に答える 1

2

xml のカスタム ビューに clickable="true" を追加してみてください。また、最初の ACTION_DOWN をインターセプトせず、ACTION_MOVE をインターセプトします。

于 2015-07-23T07:48:36.243 に答える