Android停止(结束)惯性滚动
场景:当页面滚动超过一定距离后,显示回到顶部的按钮,点击按钮平滑滚动回顶部。
实现:监听页面滚动距离,与一特定值比较,控制按钮显示隐藏,点击按钮点用页面平滑滚动Api或者通过自定动画实现滚动。
存在问题:惯性滚动在页面返回顶部后并未结束,导致继续滚行下滑,使得页面无法停留在置顶状态。
解决方法:未找到有效的自带Api实现停止惯性滚动,所以考虑使用模拟点击的方式停止页面滚动。
-
使用MotionEventobtain(long downTime, long eventTime, int action,float x, float y, int metaState)方法创建一个页面内的MotionEvent.ACTION_DOWN事件,调用页面视图的dispatchTouchEvent(MotionEvent ev)传递事件
-
使用MotionEventobtain(long downTime, long eventTime, int action,float x, float y, int metaState)方法创建一个页面内的MotionEvent.ACTION_CANCEL事件,调用页面视图的dispatchTouchEvent(MotionEvent ev)传递事件
kotlin代码示例:
scrollView?.let {
val event1 = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_DOWN,
(it.right - it.left) / 2f, (it.bottom - it.top) / 2f, 0)
it.dispatchTouchEvent(event1)
val event2 = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_CANCEL,
(it.right - it.left) / 2f, (it.bottom - it.top) / 2f, 0)
it.dispatchTouchEvent(event2)
it.smoothScrollTo(0, 0)
}

浙公网安备 33010602011771号