我小时候FrameLayout
有一个扩展的ImageView
(github) 。当我将onClick()
-Event 设置为时,FrameLayout
它不会被触发。原因似乎是onTouch()
方法的返回值。
如果我将 ACTION_DOWN 的返回值设置为 false,则事件会正确传递 - 但是多点触控功能会中断。performClick()
在 ACTION_UP 事件中运行也一无所获。
如何正确处理这些事件?
我小时候FrameLayout
有一个扩展的ImageView
(github) 。当我将onClick()
-Event 设置为时,FrameLayout
它不会被触发。原因似乎是onTouch()
方法的返回值。
如果我将 ACTION_DOWN 的返回值设置为 false,则事件会正确传递 - 但是多点触控功能会中断。performClick()
在 ACTION_UP 事件中运行也一无所获。
如何正确处理这些事件?
目前我通过手动将点击事件传递给视图的父母解决了这个问题:
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 事件执行相同的操作。它按我需要的方式工作,但我不喜欢这个解决方案..
尝试将父 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>