0

我小时候FrameLayout有一个扩展的ImageView(github) 。当我将onClick()-Event 设置为时,FrameLayout它不会被触发。原因似乎是onTouch()方法的返回值。

如果我将 ACTION_DOWN 的返回值设置为 false,则事件会正确传递 - 但是多点触控功能会中断。performClick()在 ACTION_UP 事件中运行也一无所获。

如何正确处理这些事件?

4

2 回答 2

1

目前我通过手动将点击事件传递给视图的父母解决了这个问题:

new GestureDetector( context, new GestureDetector.SimpleOnGestureListener()
{
    @Override
    public boolean onSingleTapConfirmed( MotionEvent event )
    {
        View view = MultitouchImageView.this;

        if( !performClick() )
        {
            while( view.getParent() instanceof View )
            {
                view = (View) view.getParent();

                if( view.performClick() )
                {
                    return true;
                }
            }

            return false;
        }

        return true;
    }

    ... 
}

对发生的 LongPress 事件执行相同的操作。它按我需要的方式工作,但我不喜欢这个解决方案..

于 2012-10-24T10:40:24.433 回答
1

尝试将父 FrameLayout 设置为在 ImageView 子之前接收触摸。您可以通过添加来做到这一点

android:descendantFocusability="beforeDescendants"

到父级的 xml。

例如

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:descendantFocusability="beforeDescendants">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>
于 2016-03-10T13:55:08.147 回答