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

    } 
}