Android ViewPager未跳转到半屏幕
我试图实现的是,用户将打开查看页面的第一页,并且查看页面将像弹簧一样反弹到第二页的一半,然后反弹到第一页,表明有更多页面可滚动。在我的代码中,它只显示下半页。它工作得很好。但是反弹的动画不起作用Android ViewPager未跳转到半屏幕,android,android-viewpager,android-animation,android-view,Android,Android Viewpager,Android Animation,Android View,我试图实现的是,用户将打开查看页面的第一页,并且查看页面将像弹簧一样反弹到第二页的一半,然后反弹到第一页,表明有更多页面可滚动。在我的代码中,它只显示下半页。它工作得很好。但是反弹的动画不起作用 private int animFactor; private ValueAnimator animator = new ValueAnimator(); AnimatorSet set = new AnimatorSet(); // private Animation animation1= new
private int animFactor;
private ValueAnimator animator = new ValueAnimator();
AnimatorSet set = new AnimatorSet();
// private Animation animation1= new TranslateAnimation()
private void animateViewPager(final ViewPager pager, final int offset, final int delay) {
if (!animator.isRunning()) {
animator.removeAllUpdateListeners();
animator.removeAllListeners();
//Set animation
animator.setIntValues(0, -offset);
animator.setDuration(delay);
animator.setRepeatCount(1);
animator.setRepeatMode(ValueAnimator.RESTART);
animator.setInterpolator(new BounceInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Integer value = animFactor * (Integer) animation.getAnimatedValue();
if (!pager.isFakeDragging()) {
pager.beginFakeDrag();
}
pager.fakeDragBy(value);
}
});
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
animFactor = 1;
}
@Override
public void onAnimationEnd(Animator animation) {
pager.endFakeDrag();
}
@Override
public void onAnimationRepeat(Animator animation) {
animFactor = -1;
}
});
set.play(animator);
set.start();
}
}
并使用这种方式调用此方法
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
if (articleDetailPager.getCurrentItem() >= 0) {
Context context = ArticleDetailActivity.this;
String filename = "Init";
SharedPreferences stats;
stats = context.getSharedPreferences(filename, 0);
int appOpen = stats.getInt("appOpen", 0);
if (appOpen == 0) {
animateViewPager(articleDetailPager, 20, 300);
appOpen += 1;
SharedPreferences.Editor editor = stats.edit();
editor.putInt("appOpen", appOpen);
editor.commit();
}
}
}
};
handler.postDelayed(r, 1000);
}
}
我得到了一个解决方案,我们可以用动画课来做这个。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
if (articleDetailPager.getCurrentItem() >= 0) {
Context context = ArticleDetailActivity.this;
String filename = "Init";
SharedPreferences stats;
stats = context.getSharedPreferences(filename, 0);
int appOpen = stats.getInt("appOpen", 0);
if (appOpen == 0) {
animateViewPager(articleDetailPager, 20, 300);
appOpen += 1;
SharedPreferences.Editor editor = stats.edit();
editor.putInt("appOpen", appOpen);
editor.commit();
}
}
}
};
handler.postDelayed(r, 1000);
}
}