代码之家  ›  专栏  ›  技术社区  ›  Adrian

当父级滚动时,Android视图停止接收触摸事件

  •  4
  • Adrian  · 技术社区  · 14 年前

    有没有办法继续接收滚动上的运动事件?如果没有,有没有其他方法来获取我需要的触摸事件?

    2 回复  |  直到 14 年前
        1
  •  9
  •   Prakash Nadar    12 年前

    如果要继续执行水平滚动,请在childview中使用requestDisallowWinterCeptToucheEvent(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;
    }
    
        2
  •  0
  •   Adrian    14 年前

    这个问题的一个解决方法是扩展ScrollView并重写oninterceptouchevent方法,这样它就只截获Y运动显著(根据一个建议,大于X运动)的触摸事件。