这应该是非常简单的,但似乎我错过了一些东西---你如何弄清ScrollView的滚动事件的方向(左/右/上/下)?在滚动视图中获取滚动方向?
首先想到的是存储getScrollX()和getScrollY(),然后在下次调用onTouchListener时比较它们。这是做事的正确方法吗?
我正在实现一个自定义的HorizontalScrollView,我只需要禁用一个方向的滚动和页面滑动。
这应该是非常简单的,但似乎我错过了一些东西---你如何弄清ScrollView的滚动事件的方向(左/右/上/下)?在滚动视图中获取滚动方向?
首先想到的是存储getScrollX()和getScrollY(),然后在下次调用onTouchListener时比较它们。这是做事的正确方法吗?
我正在实现一个自定义的HorizontalScrollView,我只需要禁用一个方向的滚动和页面滑动。
研究告诉我,这种情况下没有滚动监听器。
你可以尝试你的接近。
另一件事我会尝试是覆盖onScrollChanged(这之前提供滚动位置)等创建自己的滚动型
更新:
对我来说这一个workes。它滚动到右侧,但不是在左侧。
public class CustomScrollView extends HorizontalScrollView {
public CustomScrollView(Context context) {
super(context);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onScrollChanged(int w, int h, int ow, int oh) {
if (w < ow) {
scrollTo(ow, h);
}
}
}
使用本
scrollView.setOnTouchListener(new View.OnTouchListener() {
float y1 = 0;
float y0 = 0;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
y0 = motionEvent.getY();
Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1));
} else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
y1 = motionEvent.getY();
if (y0 - y1 > 0) {
Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1));
} else if (y0 - y1 < 0) {
Log.e("Y", motionEvent.getAction() + " - " + (y0 - y1));
}
}
return false;
}
});
没有我的做法没有奏效。 ACTION_DOWN未被捕获。它与作为ViewGroup的HorizontalScrollView有关。现在尝试你的方法。根据ViewGroup文档,这可能比重写onInterceptOnTouchEvent和onTouchEvent更简单。 –
我更新了我的答案并添加了适用于我的代码... – Knickedi
它工作正常吗?那是你在找什么?请评价如果是这种情况 – Knickedi