[英]Android View stops receiving touch events when parent scrolls
我有一個自定義的Android視圖,它覆蓋了onTouchEvent(MotionEvent)來處理視圖中內容的水平滾動。 但是,當包含它的ScrollView垂直滾動時,自定義視圖會停止接收觸摸事件。 理想情況下,我想要的是自定義視圖繼續接收事件,以便它可以處理自己的水平滾動,而包含視圖層次結構處理垂直滾動。
有沒有辦法繼續在滾動上接收這些動作事件? 如果沒有,有沒有其他方法來獲得我需要的觸摸事件?
在子視圖中使用requestDisallowInterceptTouchEvent(true)以防止垂直滾動(如果要繼續進行水平滾動,並在完成后重置它)。
private float downXpos = 0;
private float downYpos = 0;
private boolean touchcaptured = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
downXpos = event.getX();
downYpos = event.getY();
touchcaptured = false;
break;
case MotionEvent.ACTION_UP:
requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_MOVE:
float xdisplacement = Math.abs(event.getX() - downXpos);
float ydisplacement = Math.abs(event.getY() - downYpos);
if( !touchcaptured && xdisplacement > ydisplacement && xdisplacement > 10) {
requestDisallowInterceptTouchEvent(true);
touchcaptured = true;
}
break;
}
super.onTouchEvent(event);
return true;
}
我正在回答我自己的問題,以防萬一其他人在谷歌搜索中表現得很差,就像我顯然那樣。 :P
此問題的解決方法是擴展ScrollView並覆蓋onInterceptTouchEvent方法,以便它只截取Y移動很重要的觸摸事件(根據一個建議,大於X移動)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.