zoukankan      html  css  js  c++  java
  • Viewpager animation duration setting

    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;
    }
     
  • 相关阅读:
    mysql命令行备份数据库
    js关闭当前页面的几种方式
    Linux添加FTP用户并设置权限
    在Activity的Title中加入进度条
    android例子程序(ApiDemo)的简单分类整理
    使用WindowManager窗口管理员,把View显示在屏幕中间
    android手动调用振动器(Vibrator)
    android 监听SDCard安装和卸载的代码片段(测试通过)
    android Paint和Color类介绍 使用示例
    GC_EXTERNAL_ALLOC freed 与 GC_EXPLICIT freed 是什么?
  • 原文地址:https://www.cnblogs.com/qianyukun/p/9099563.html
Copyright © 2011-2022 走看看