自定义dispatchTouchEvent会导致View.OnClickListener被忽略

时间:2013-10-17 13:48:48

标签: android android-custom-view viewgroup

我对自定义ViewGroups dispatchTouchEvent进行了以下调整。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    final float xf = ev.getX();
    final float yf = ev.getY();
    final float scrolledXFloat = xf + getScrollX();
    final float scrolledYFloat = yf + getScrollY();
    final int scrolledXInt = (int) scrolledXFloat;
    final int scrolledYInt = (int) scrolledYFloat;

    if(isDetailOpened()){
        mDetailView.getHitRect(mTempRect);
        if(mTempRect.contains(scrolledXInt,scrolledYInt)){
            // offset the event to the view's coordinate system
            final float xc = scrolledXFloat - mDetailView.getLeft();
            final float yc = scrolledYFloat - mDetailView.getTop();
            MotionEvent cp = MotionEvent.obtain(ev);
            cp.setLocation(xc, yc);
            boolean consumed = mDetailView.dispatchTouchEvent(cp);
            cp.recycle();
            return consumed;
        }
    }

    return super.dispatchTouchEvent(ev);
}

mDetailView在他的onTouchEvent中获取事件,但是没有正确触发onClickListener,但GestureDetector例如工作正常。有人知道可能导致这种情况的原因吗? mDetailView不是视图层次结构的一部分。我在dispatchDraw中手动绘制它。也许没有View附加到窗口可能是一个问题。关于这个的任何信息?感谢

1 个答案:

答案 0 :(得分:0)

问题是没有在ViewGroup中插入我的详细信息视图。当mDetailView成为我自定义ViewGroup的子代时,问题就解决了。