【问题标题】:Understanding how to use OverScroller class了解如何使用 OverScroller 类
【发布时间】:2013-09-12 15:51:50
【问题描述】:

我正在考虑在我的项目中添加过度滚动(不是颜色变化),但即使在阅读了 API 文档和这里的几个问题之后,我仍然不明白我需要做什么才能让它工作。

根据 OverScroller 的 API 文档:“这个类封装了滚动,能够超越滚动操作的边界。在大多数情况下,这个类是 Scroller 的替代品。

我之前在父类中有一个 Scroller 对象:

public boolean onTouchEvent(MotionEvent ev) {   
    ....// code to calculate deltas
     if (deltaY != 0 || deltaX != 0)
            scrollBy(deltaX, deltaY);
}

然后我把它改成这样:

if (deltaY != 0 || deltaX != 0)
            overScrollBy(deltaX, deltaY, getScrollX(), getScrollY(),
                child.getRight() - getWidth(), child.getBottom() - getHeight(), 
                    OVERSCROLL_DISTANCE, OVERSCROLL_DISTANCE, false);

现在滚动根本不起作用! fling() 可以作为替代品使用,但不能滚动......

总的来说,我有两个问题:

  1. 为什么滚动不适用于overScrollBy?我是否必须添加额外的代码才能完成这项工作?
  2. 为什么我必须打电话给mScroller.fling(),而只打电话给overScrollBy()?为什么不mScroller.overScrollBy()?它是否以某种方式内置于 View 类中?

这可能很明显,但我在这里挣扎。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: android android-scrollview android-scroll android-overscoll


    【解决方案1】:

    也许是因为这个?

    public class ViewConfiguration{
    ...
        /**
         * Max distance in dips to overscroll for edge effects
         */
        private static final int OVERSCROLL_DISTANCE = 0;
    ...
    }
    

    【讨论】:

      【解决方案2】:

      关于overScrollBydocumentation 说:

      调用此方法的视图应覆盖 onOverScrolled(int, int, boolean, boolean) 以响应过度滚动操作的结果。

      正如您在阅读source code 时发现的那样,overScrollBy 本身不执行任何滚动,但它在最后调用onOverScrolled
      因此,要使滚动发生,您应该在 View 类中添加如下内容:

      @Override
      protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
          scrollTo(scrollX, scrollY);
      }
      

      overScrollByView 类的一个方法,用于滚动视图内容(通过onOverScrolled)。
      OverScroller 类只是进行一些滚动计算,例如使用mScroller.fling()mScroller.springBack(),但需要进一步调用才能实际滚动视图内容,通常使用:

      @Override
      public void computeScroll() {
          if(mScroller.computeScrollOffset()) {
              scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
              invalidate();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2018-01-01
        • 2011-10-30
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多