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は私たちにそうしないように求め続けています.

基本的にGoogleの発言を引用するこのSOの質問を参照してください

ListView で Horizo​​ntalScrollView を使用しないでください [...]

于 2014-03-10T14:37:49.860 に答える