gpt4 book ai didi

java - 如何仅拦截 ScrollView 中特定角度的运动事件?

转载 作者:行者123 更新时间:2023-12-01 14:24:25 24 4
gpt4 key购买 nike

我尝试禁用特定角度的垂直 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这基本上引用了谷歌的说法

You should never use a HorizontalScrollView with a ListView [...]

关于java - 如何仅拦截 ScrollView 中特定角度的运动事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com