0

Я пытаюсь достигнуть того, что пользователь откроется на первую страницу пейджера представления, а пейджер представления будет отскакивать, как весна, до половины второй страницы и возвращаться на первую страницу, указывая, что там больше страниц для прокрутки. В моем коде он показывает только следующую половину страницы. Он работает нормально. Но анимация подпрыгивания не работает.ViewPager не подпрыгивает до половины экрана

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(); 
    } 
} 
+0

я получил решение, мы можем сделать это, используя класс анимации. – vishal

ответ

0
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); 

    } 
}