Android onTouchEvent的MotionEvent.ACTION_UP不響應

自己寫了一個自定義View,裏面要監聽ouTouchEvent事件,於是我重寫了View的onTouchEvent方法。

代碼如下:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        if(event.getAction() == MotionEvent.ACTION_UP) {
            for (PersonRect rect : mShowPersonRectList) {
                Log.d(TAG, rect.toString());
                if (rect.toRect().contains((int)(x / mWidthRatio), (int)(y / mHeightRatio))) {
                    mFollowedId = rect.getId();
                    invalidate();
                    if (mOnClickRectListener != null) {
                        mOnClickRectListener.onClickRect(rect.getId());
                    }
                    break;
                }
            }
        }
        return super.onTouchEvent(event);
    }

最後運行的時候發現沒有出現我寫的效果,日誌也沒有打印出來,仔細研究了一下發現,onTouchEvent有執行,但是MotionEvent.ACTION_UP分支沒有執行,很奇怪的問題。

最後谷歌一下終於找到問題所在了,原來在onTouchEvent的Motion.ACTION_DOWN分支如果返回的是false,那麼onTouch事件將不會往下面傳遞下去,如果返回true,那麼onTouch事件將會傳遞下去,從而可以響應Motion.ACTION_UP分支。

http://stackoverflow.com/questions/12588263/in-ontouchevent-action-up-doesnt-work

所以這裏出現MotionEvent.ACTION_UP分支未響應,是因爲return super.onTouchEvent(event);返回的是false,所以解決方案就是將return super.onTouchEvent(event);改爲return true就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章