OnTouch方法使用click事件并阻止在父级中执行

时间:2012-10-14 03:33:44

标签: android android-view ontouchlistener android-event

我的孩子FrameLayoutextended ImageView (github)。当我将onClick() - 事件设置为FrameLayout时,它将不会被触发。原因似乎是onTouch() method的返回值。

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

如何正确处理这些事件?

2 个答案:

答案 0 :(得分: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事件做同样的事情。它按我需要的方式工作,但我不喜欢这个解决方案..

答案 1 :(得分:1)

尝试将父FrameLayout设置为在ImageView子项之前接收触摸。 您可以通过添加

来完成此操作
android:descendantFocusability="beforeDescendants"

到父级的xml。

e.g。

<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>