我在我的应用程序中有一个ViewPager,我希望它在第一次加载时动摇。这是为了向用户显示可用的更多页面。我怎样才能以编程方式实现?如何晃动ViewPager以显示用户有更多可用页面?
但是,我不希望寻呼机自动滚动到下一页。
我在我的应用程序中有一个ViewPager,我希望它在第一次加载时动摇。这是为了向用户显示可用的更多页面。我怎样才能以编程方式实现?如何晃动ViewPager以显示用户有更多可用页面?
但是,我不希望寻呼机自动滚动到下一页。
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数量进行滑动,直到获得您要查找的效果。
一个很好的方法谢谢您的回答,我在使用'AnimatorUpfateListener'麻烦,虽然,希望得到一段代码,看看它是如何与'ViewPager' –
工作见我更新的答案。 –
如果你想动摇它,你可以使用它的动画。
我已经完成了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
,但是,您需要确定数据何时第一次加载。但我不认为你会遇到问题。
祝你好运!
图像滑块可以b。就本 –