当ViewPager从右向左滚动时,LinearInterpolator不能正常工作

时间:2012-11-02 13:26:07

标签: java android scroll android-viewpager linear-interpolation

我正在使用v4 ViewPager并遵循以下链接 使用插值器设置滚动速度和滚动动画。

Slowing speed of Viewpager controller in android

当我在这样的建设者中询问时,我曾使用过线性插值器

  private void setScroller() {
     try {
        Field mScroller;
        mScroller = ViewPager.class.getDeclaredField("mScroller");
        mScroller.setAccessible(true); 
        FixedSpeedScroller scroller = 
           new FixedSpeedScroller(this.getContext(), new LinearInterpolator());
        mScroller.set(this, scroller);
     } catch (NoSuchFieldException e) {
     } catch (IllegalArgumentException e) {
     } catch (IllegalAccessException e) {
     }
  }

现在我的浏览页面中有很多页面的观点。下面我已经添加了pagerindicator 它由点组成。

  O O O O O O O 

按一个点可以使用smoothScrolling设置当前页面。 使用触摸事件,我能够获得需要显示的正确页码。 在知道这个之后,我称这个方法有一个平滑的滚动。

  public void snapToPage(int whichPage) {
     int numperOfSwapsRequired = whichPage - getCurrentPageIndex();
     mScrollingDuration *= numperOfSwapsRequired; 

     if(numperOfSwapsRequired == 0) return;
     if(numperOfSwapsRequired > 0) {
        for(int i = 0; i<numperOfSwapsRequired; i++){
           setCurrentItem(getCurrentItem()+1, true);
        }
     } else {
        for(int i = 0; i>numperOfSwapsRequired; i--){
           setCurrentItem(getCurrentItem()-1, true);  
        }
     }
     mScrollingDuration = 300;
  } 

现在一切顺利。但只有当我选择一个对所选页面点正确的点时。它可以使用线性动画正确滚动。

但是当我选择留在所选页面点的点时。它不滚动。它只是直接跳转到没有滚动动画的页面。

所以我很困惑如何解决这个问题。这与插值器或滚动器有关。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

啊......啊......最终总是会成为一个愚蠢而又小的错误。 但是,谢天谢地,我抓住了它。我甚至开始阅读Scroller Google Code文件:)

mScrollingDuration *= numperOfSwapsRequired; 

当我们从右向左滚动时,这个数字是负数,导致动画时间为零。

这解决了它

mScrollingDuration *= Math.abs(numperOfSwapsRequired);