private void animatePagerTransition(final boolean forward) {

    ValueAnimator animator = ValueAnimator.ofInt(0, viewPager.getWidth());
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
} @Override
public void onAnimationEnd(Animator animation) {
viewPager.endFakeDrag();
} @Override
public void onAnimationCancel(Animator animation) {
viewPager.endFakeDrag();
} @Override
public void onAnimationRepeat(Animator animation) {
}
}); animator.setInterpolator(new AccelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { private int oldDragPosition = 0; @Override
public void onAnimationUpdate(ValueAnimator animation) {
int dragPosition = (Integer) animation.getAnimatedValue();
int dragOffset = dragPosition - oldDragPosition;
oldDragPosition = dragPosition;
viewPager.fakeDragBy(dragOffset * (forward ? -1 : 1));
}
}); animator.setDuration(AppConstants.PAGER_TRANSITION_DURATION_MS);
viewPager.beginFakeDrag();
animator.start();
}

UPDATE:

private int oldDragPosition = 0;

private void animatePagerTransition(final boolean forward, int pageCount) {
// if previous animation have not finished we can get exception
if (pagerAnimation != null) {
pagerAnimation.cancel();
}
pagerAnimation = getPagerTransitionAnimation(forward, pageCount);
if (viewPager.beginFakeDrag()) { // checking that started drag correctly
pagerAnimation.start();
}
} private Animator getPagerTransitionAnimation(final boolean forward, int pageCount) {
ValueAnimator animator = ValueAnimator.ofInt(0, viewPager.getWidth() - 1);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
} @Override
public void onAnimationEnd(Animator animation) {
viewPager.endFakeDrag();
} @Override
public void onAnimationCancel(Animator animation) {
viewPager.endFakeDrag();
} @Override
public void onAnimationRepeat(Animator animation) {
viewPager.endFakeDrag();
oldDragPosition = 0;
viewPager.beginFakeDrag();
}
}); animator.setInterpolator(new AccelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override
public void onAnimationUpdate(ValueAnimator animation) {
int dragPosition = (Integer) animation.getAnimatedValue();
int dragOffset = dragPosition - oldDragPosition;
oldDragPosition = dragPosition;
viewPager.fakeDragBy(dragOffset * (forward ? -1 : 1));
}
}); animator.setDuration(AppConstants.PAGER_TRANSITION_DURATION_MS / pageCount); // remove divider if you want to make each transition have the same speed as single page transition
animator.setRepeatCount(pageCount); return animator;
}
 

最新文章

  1. [网站性能2]Asp.net平台下网站性能调优的实战方案
  2. bzoj2194: 快速傅立叶之二
  3. 数据结构算法C语言实现(七)--- 3.1栈的线性实现及应用举例
  4. UVA 11427 (概率DP+期望)
  5. [dataTables.js error] Uncaught TypeError: myTable.row is not a function
  6. Study notes for Clustering and K-means
  7. 将大数据利用 BCP 导出SqlServer数据到CSV
  8. Android Studio下打jar包
  9. Codeforces Round #327 (Div. 1) D. Top Secret Task
  10. linux命令:Linux命令大全
  11. PageRank_网页排名_MapReduceJava代码实现思路
  12. Redis客户端ServiceStack.Redis的简单使用
  13. <转>如何在iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果
  14. Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)
  15. Javabean介绍
  16. tracert traceroute
  17. 关于变量,JAVA基本数据类型,运算符类型,如何从控制台接收输入的数据
  18. VS2017 配置ImageMagick
  19. dxbarmanager生成传统下拉式样的菜单
  20. CRF,没完全看懂

热门文章

  1. LCD1602和LCD12864
  2. noip 2013 luogu P1969 积木大赛
  3. java队列--queue详细分析
  4. Spring的IoC容器概述
  5. 微软CIO如何与业务部门打交道?
  6. Android判断屏幕锁屏的方法总结
  7. Webstorm上面通过babel将es6转化为es5
  8. WPF窗口最大化
  9. XMLHTTPRequest DEMO(发送测试)
  10. (WPF)Storyboard