android - 当我设置 ViewGroup 仍然可以滚动时,它可以在 getScrollX()>=0 时滚动
问题描述
这是我的代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int x=(int)event.getX();
if (action == MotionEvent.ACTION_DOWN) {
mLastX = x;
mStart = getScrollX();
} else if (action == MotionEvent.ACTION_MOVE) {
if (!mScroller.isFinished()) {
mScroller.abortAnimation();
}
Log.d(TAG, "onTouchEvent: getScrollX-->"+getScrollX());
int dx=mLastX-x;
if(getScrollX()>=0&&getScrollX()<mSlideViewWidth){
scrollBy(dx,0);
}
mLastX=x;
} else if (action == MotionEvent.ACTION_UP) {
mEnd = getScrollX();
if(getScrollX()<0){
mScroller.startScroll(getScrollX(),0,-mEnd,0);
}
}
postInvalidate();
return true;
}
当我向左滑动屏幕时,ScrollX小于0,所以不应该调用scrollby方法。但是当我向左滑动屏幕时,ViewGroup仍然可以向左移动一小段距离。我猜该解决方案可能与 getScrollX 方法有关。但是因为我最近才学习自定义视图,所以我不知道如何处理这个问题。我在网上找了很久。但是没有用。请帮助或尝试提供一些想法如何实现这一点。在此先感谢。 问题描述gif
解决方案
它是一个动画问题,或者您在最后一个 scrollX 之前仍然有翻译效果,或者可能是您的情况,您最后一次迭代中的dx
值 +getScrollX()
大于 0,您的解决方案是查看您是否靠近边缘并调整dx
为准确-getScrollX()
如果它更大的数量。
int dx=mLastX-x;
if (dx < -getScrollX()) dx = -getScrollX(); //not tested but should work
if(getScrollX()>=0&&getScrollX()<mSlideViewWidth)
scrollBy(dx,0);
推荐阅读
- php - MySQL PHP在具有varchar值的重复键上插入更新
- c# - 如何编写客户端代码以允许记录器注入
- java - 我们可以为其中一个变量添加 @Column 和 @OneToOne 两个注释吗?
- typescript - 打字稿用只读属性初始化对象
- python - 考虑一个列表 a=["boo",[1,2,3]],为什么 print(a[0:2][0:1]) 打印 ['boo'] 而 print(a[0:2] [0:2]) 打印 ['boo',[1,2,3]]?
- python - 合并两行并为 Pandas DataFrame 形成列标题
- android - 为什么最新版本的 Stripe gradle 不允许 .setName?
- javascript - 如何解决从 Facebook 帖子到应用程序或网页的深度链接问题?
- python - requests.get 函数将哪些数据发送到 API?
- python - 无法创建'path/to/repo/external/.git/index.lock':权限被拒绝