[英]detect ScrollView vertical scroll direction
我嘗試使用ObservableScrollView和CustomScrollView
我遇到的問題是在任何情況下都不會觸發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
}
});
我的建議是在滾動視圖上使用GestureDetector
和SimpleGestureListener
。 這將使您可以通過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
更多信息和注意onDown
: GestureDetector.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.