我尝试全部成功禁用特定角度的垂直ScrollView。

其背后的目标是正确处理嵌套在垂直ScrollView中的多个水平ListView。

我尝试了这个,但是没有用:

public class VScrollView extends ScrollView {

    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public VScrollView(Context context) {
        super(context);
        mGestureDetector = new GestureDetector(context, new YScrollDetector());
        setFadingEdgeLength(0);
    }

    public VScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(context, new YScrollDetector());
        setFadingEdgeLength(0);
    }

    public VScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mGestureDetector = new GestureDetector(context, new YScrollDetector());
        setFadingEdgeLength(0);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
    }


    class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            if (e1 != null && e2 != null) {
                double delta_x = (e1.getX() - e2.getX());
                double delta_y = (e1.getY() - e2.getY());
                double radians = Math.abs(Math.toDegrees(Math.atan2(delta_y, delta_x)));
                if (radians > 80 && radians < 100) {
                    return true;
                }
            }
            return false;
        }
    }
}

最佳答案

我知道这可能是您不想听到的,但是Google一直要求我们不要这样做。

请参阅this SO question,该引用基本上引用了Google的说法


您永远不要将Horizo​​ntalScrollView与ListView一起使用[...]

07-28 03:28