将触摸事件传递给Android中的Parent View的onTouchListener

Ash*_*win 2 android

我有一个列表视图,其项目是一个linearlayout,它有一个按钮作为它的子视图.我希望linearlayout的ontouchLIstener能够正常工作.我不想用onInterceptTouchEvent.有没有办法可以通过触摸将该按钮传递给父列表视图.我试过这个 - 从按钮的onTouchListener返回true

private View.OnTouchListener buttonListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            Log.i(TAG, "Button On Touch");
            return true;
        }
};
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它不会将触摸事件传递给线性布局onTouchListener.

一定有它应该工作.

Ash*_*win 10

View组的事件链就像这样 - dispatchEvent被称为.然后dispatchEvent打电话onInterceptTouchEvent.如果返回false,则触摸事件将传递给ViewGroup的子项.如果任何一个孩子消耗了这个事件(在这种情况下按钮会消耗该事件),即如果他们返回true,则动作事件不会传递给其他方法.由于该按钮是可点击的,因此在这种情况下返回true.

如果该onInterceptTouchEvent方法返回true,则子视图不会被赋予motion事件,而是调用ViewGroup onTouchListeneronTouch方法.
因此,要将触摸事件传递给父级(查看组),请onTouchListener确保 在父级(ViewGroup)的方法中返回trueonInterceptTouchEvent.你不必覆盖onDispatchTouchEvent()

@Override
    public boolean onInterceptTouchEvent(MotionEvent motionEvent) {

        Log.i(TAG,"PARENT.onInterceptTouchEvent");

        return true;
}
Run Code Online (Sandbox Code Playgroud)

有关触摸导航如何完成的更多详细信息,请参阅此堆栈帖子