首页 > 解决方案 > 当我设置 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

标签: android

解决方案


它是一个动画问题,或者您在最后一个 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);

推荐阅读