如何删除dispatchTouchEvent和子视图的onClick之间的延迟?

时间:2012-07-15 23:42:11

标签: android events layout

我有一个自定义View子类,我将其渲染到我的图形,另一个View子类(实际上是LinearLayout的子类),我有时会用它来覆盖图形信息。第二个视图包含一个ImageView,我将其用作触发事件的按钮。

正如我实现的那样,在接收onTouchEvent的第一个视图和在其子视图上调用dispathTouchEvent()之间存在意外延迟,并且调用了ImageView的onClickListener的onClick()。这是相关的代码:

@Override
public boolean onTouchEvent(MotionEvent event)
{
    if ( getPopupRect().contains(event.getX(), event.getY()) )
    {
        // translate to relative coordinates
        PointF popupOrigin = getPopupPoint();
        event.setLocation(event.getX() - popupOrigin.x, event.getY() - popupOrigin.y);
        mPopup.dispatchTouchEvent(event);
    }
    ...
}

在我触摸并释放“主”视图之前,不会调用子视图的onClick()方法。

问题:如何删除或最小化此延迟,以便在合理的时间内调用onClick(),而无需进一步的用户操作?

1 个答案:

答案 0 :(得分:0)

问题在于“点击”包括按下和发布事件。因此,除非您还释放按钮,否则永远不会获得点击事件。 在子视图上使用OnTouchListener,就像在父视图上一样 - 然后您将能够获得相同的事件。