【发布时间】:2019-10-15 22:21:59
【问题描述】:
这应该很简单,但似乎我错过了一些东西 --- 你如何确定 ScrollView 的滚动事件的方向(左/右/上/下)?
首先想到的是存储getScrollX()和getScrollY(),然后在下次调用onTouchListener时比较它们。这是正确的做事方式吗?
我正在实现一个自定义的 HorizontalScrollView,我只需要在一个方向上禁用滚动和页面滑动。
【问题讨论】:
标签: android
这应该很简单,但似乎我错过了一些东西 --- 你如何确定 ScrollView 的滚动事件的方向(左/右/上/下)?
首先想到的是存储getScrollX()和getScrollY(),然后在下次调用onTouchListener时比较它们。这是正确的做事方式吗?
我正在实现一个自定义的 HorizontalScrollView,我只需要在一个方向上禁用滚动和页面滑动。
【问题讨论】:
标签: android
研究告诉我,这种情况没有滚动监听器。
你可以试试你的方法。
我会尝试的另一件事是覆盖onScrollChanged(它提供之前的滚动位置),然后创建自己的 ScrollView
更新:
这个对我有用。它向右滚动,但不向左滚动。
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;
}
});
【讨论】: