java - 自定义 CoordinatorLayout 行为在第一个事件后丢失触摸输入流

标签 java android touch-event android-coordinatorlayout

我正在尝试编写一个自定义Behavior,它需要拦截触摸事件。 documentation说我应该从 onInterceptTouchEvent() 返回 true 以接管事件流,然后只要我想继续接收事件就从 onTouchEvent() 返回 true 。当我执行此操作时,仅收到 ACTION_DOWNACTION_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() 中获取连续的事件流?

最佳答案

尝试将 clickable="true"添加到 xml 中的自定义 View 中。 另外不要拦截第一个ACTION_DOWN,拦截ACTION_MOVE。

关于java - 自定义 CoordinatorLayout 行为在第一个事件后丢失触摸输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324942/

相关文章:

android - ViewPager 用 2 根手指滑动

java - 尝试对字符串数组进行排序时插入排序崩溃

java - 如何在 Java 中实现 Word2Vec?

java - eclipse的内容助手正在打开但没有描述

java - 如何获取列表格式的 JSON 响应

android - 自动旋转关闭时获取设备旋转

android - Media Player应用程序中的多个声音崩溃

java - 如何在Android模拟器上测试sensormanager?

android - 如何检测 Pixelbook Pen 按钮?

typescript - angular 7 中的 ipad 双击和长按事件