簡體   English   中英

檢測ScrollView垂直滾動方向

[英]detect ScrollView vertical scroll direction

我嘗試使用ObservableScrollViewCustomScrollView

我遇到的問題是在任何情況下都不會觸發OnScrollChanged。 我想檢測scrollview是向下滾動還是向上滾動。 任何幫助表示贊賞。

我也這樣嘗試過但沒有結果

 mScrollView?.viewTreeObserver?.addOnScrollChangedListener {
            if (viewScrolled < mScrollView?.getScrollY()!!) {
                viewScrolled = mScrollView?.getScrollY()!!
                Log.d("scroll", "scrolling up")
            }
            if (viewScrolled > mScrollView?.getScrollY()!!) {
                viewScrolled = mScrollView?.getScrollY()!!
                Log.d("scroll", "scrolling down")
            }
        }

該偵聽器有效,但問題是在這種情況下如何檢測上下滾動

 mScrollView?.viewTreeObserver?.addOnScrollChangedListener {}

Kotlin中的每個view實例都擁有對viewTreeObserver的引用,因此當您在scrollview中滾動列表時,應調用addScrollChangedListener()方法。

並基於此確定滾動視圖。 它是Java代碼,但是您可以轉換為Kotlin。

scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
        int scrollY = rootScrollView.getScrollY(); // For ScrollView
        int scrollX = rootScrollView.getScrollX(); // For HorizontalScrollView
        // DO SOMETHING WITH THE SCROLL COORDINATES
    }
});

我的建議是在滾動視圖上使用GestureDetectorSimpleGestureListener 這將使您可以通過setOnTouchListener添加setOnTouchListener 只要記住要從添加的偵聽器中返回false,否則您可能會從滾動條中得到一些意外的行為(您不想消耗觸摸事件,只需監視它們即可)

這是您感興趣的SimpleGestureListener中方法的簽名。這使您可以移動Y的距離,它可以是正或負,表示向下或向上。

onScroll
Added in API level 1

public boolean onScroll (MotionEvent e1, 
                MotionEvent e2, 
                float distanceX, 
                float distanceY)

這是用於手勢檢測的Android培訓頁面: https : //developer.android.com/training/gestures/detector

有關onDown更多信息和注意onDownGestureDetector.SimpleOnGestureListener和GestureDetectorCompat不起作用。 我的代碼有什么問題?

更新:

代碼應類似於以下內容:

val scrollView = ScrollView(context)
val gestureListener = object : GestureDetector.SimpleOnGestureListener() {
    override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
        // Use distanceY
        return false
    }
}
val gestureDetector = GestureDetector(context, gestureListener)
scrollView.setOnTouchListener { v, event ->
    gestureDetector.onTouchEvent(event)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM