這應該是非常簡單的,但似乎我錯過了一些東西---你如何弄清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