我的孩子FrameLayout
有extended ImageView
(github)。当我将onClick()
- 事件设置为FrameLayout
时,它将不会被触发。原因似乎是onTouch()
method的返回值。
如果我将ACTION_DOWN的返回值设置为false,则事件会正确传递 - 但随后多点触控功能会中断。在ACTION_UP事件中运行performClick()
也一无所获。
如何正确处理这些事件?
答案 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>