0

我尝试禁用特定角度的垂直 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;
        }
    }
}
4

1 回答 1

1

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

参考这个基本上引用谷歌的话的SO问题

您永远不应该将 Horizo​​ntalScrollView 与 ListView [...]

于 2014-03-10T14:37:49.860 回答