2016-11-30 15 views
1

我在我的应用程序中有一个ViewPager,我希望它在第一次加载时动摇。这是为了向用户显示可用的更多页面。我怎样才能以编程方式实现?如何晃动ViewPager以显示用户有更多可用页面?

但是,我不希望寻呼机自动滚动到下一页。

+0

图像滑块可以b。就本 –

回答

1

ViewPager有刷卡编程的方法:fakeDragBy

https://developer.android.com/reference/android/support/v4/view/ViewPager.html#fakeDragBy(float)

这里是你如何能做到这一点:

  • 呼叫viewPager.beginFakeDrag()
  • 开始的漫画家。在AnimatorUpdateListener覆盖onAnimationUpdate所以它调用viewPager.fakeDragBy()
  • AnimatorListener覆盖onAnimationEnd所以它调用viewPager.endFakeDrag()这个电话后,ViewPager应后回到初始页面。

vpaliyX的翻译答案不会显示下一页。您需要使用fakeDragBy,以便用户可以短暂看到下一页的边缘。


按照要求,这里是一个代码片段:

private float drag; 

    ... 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mViewPager.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       mViewPager.beginFakeDrag(); 
       drag = 0; 
       float density = getResources().getDisplayMetrics().density; 
       // 120 is the number of dps you want the page to move in total 
       ValueAnimator animator = ValueAnimator.ofFloat(0, 120 * density); 
       animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
        @Override 
        public void onAnimationUpdate(ValueAnimator valueAnimator) { 
         float progress = (float) valueAnimator.getAnimatedValue(); 
         mViewPager.fakeDragBy(drag - progress); 
         drag = progress; 
        } 
       }); 
       animator.addListener(new Animator.AnimatorListener() { 
        @Override 
        public void onAnimationStart(Animator animator) { } 

        @Override 
        public void onAnimationEnd(Animator animator) { 
         mViewPager.endFakeDrag(); 
        } 

        @Override 
        public void onAnimationCancel(Animator animator) { } 

        @Override 
        public void onAnimationRepeat(Animator animator) { } 
       }); 
       animator.setDuration(400); 
       animator.start(); 
      } 
     }, 300); 

    } 

我把一个300毫秒的延迟开始。我真的不知道这是否有必要。

请注意表达式drag - progress,它给出一个负数。要向左滑动,您必须使用负值。

另请注意,我没有包含任何代码来确定这是否是第一次打开该应用程序。

您可以使用开始延迟,动画持续时间和dps数量进行滑动,直到获得您要查找的效果。

+0

一个很好的方法谢谢您的回答,我在使用'AnimatorUpfateListener'麻烦,虽然,希望得到一段代码,看看它是如何与'ViewPager' –

+0

工作见我更新的答案。 –

0

如果你想动摇它,你可以使用它的动画。

我已经完成了FloatingActionButton的相同工作,并且工作完美。

对于ViewPager退房验证码:

ObjectAnimator shakeAnimation=ObjectAnimator.ofFloat(yourViewPager,View.TRANSLATION_X,-25f,25f); 
             shakeAnimation.setDuration(100); 
             shakeAnimation.setRepeatCount(2); 
             shakeAnimation.addListener(new AnimatorListenerAdapter() { 
              @Override 
              public void onAnimationEnd(Animator animation) { 
               super.onAnimationEnd(animation); 
               yourViewPager.setTranslationY(0f); 
              } 
             }); 
             shakeAnimation.start(); 

您可以调整翻译的方便,于我而言,它只是[-25,25]。也可以设定动画的持续时间,以及重复计数。

当数据首次加载时,您可以将此代码用于您的ViewPager,但是,您需要确定数据何时第一次加载。但我不认为你会遇到问题。

祝你好运!