2012-11-02 37 views
3

我正在使用v4 ViewPager并在下面的链接中能够使用插值器设置滚动速度和滚动动画。当ViewPager从右向左滚动时,LinearInterpolator工作不正常

Slowing speed of Viewpager controller in android

当construtor问这样

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) { 
    } 
    } 

现在,当我在我的viewpages的意见多页我用线性内插。在它下面我添加了由点组成的寻呼机 。

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; 
    } 

现在一切正常。但是,只有当我选择一个点,这是正确的选定的网页点。它适合使用线性动画进行滚动。

但是,当我选择离开选定页面点的点。它不滚动。它只是直接跳转到没有滚动动画的页面。

所以我很困惑如何解决这个问题。这是与插值器还是滚轮相关的。

任何帮助,将不胜感激。

感谢

+0

说明太多看..可以分散掉很好的答案。我知道:) – Javanator

+0

尝试设置'新的AccelerateInterpolator()',看看问题是否仍然存在。 – Carnal

+0

@Carnal对不起没有影响.. – Javanator

回答

0

AHHHHH ......它总是要在最后一个愚蠢的,但小错误。 但我完全感谢它。我甚至开始阅读滚动谷歌代码文件:)

mScrollingDuration *= numperOfSwapsRequired; 

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

这解决它的问题

mScrollingDuration *= Math.abs(numperOfSwapsRequired);