2011-09-20 78 views
1

這應該是非常簡單的,但似乎我錯過了一些東西---你如何弄清ScrollView的滾動事件的方向(左/右/上/下)?在滾動視圖中獲取滾動方向?

首先想到的是存儲getScrollX()和getScrollY(),然後在下次調用onTouchListener時比較它們。這是做事的正確方法嗎?

我正在實現一個自定義的Horizo​​ntalScrollView,我只需要禁用一個方向的滾動和頁面滑動。

回答

7

研究告訴我,這種情況下沒有滾動監聽器。
你可以嘗試你的接近。
另一件事我會嘗試是覆蓋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); 
     } 
    } 
} 
+0

沒有我的做法沒有奏效。 ACTION_DOWN未被捕獲。它與作爲ViewGroup的Horizo​​ntalScrollView有關。現在嘗試你的方法。根據ViewGroup文檔,這可能比重寫onInterceptOnTouchEvent和onTouchEvent更簡單。 –

+0

我更新了我的答案並添加了適用於我的代碼... – Knickedi

+0

它工作正常嗎?那是你在找什麼?請評價如果是這種情況 – Knickedi

1

使用本

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; 
    } 
}); 
相關問題