自己寫了一個自定義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就可以了。