簡體   English   中英

當父卷軸滾動時,Android View停止接收觸摸事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM