Search code examples
androidandroid-viewpagerandroid-animation

Android Viewpager bounce to half a page


So what i am trying to achieve is user would open to first page of the view pager, and the view pager would bounce to half of the second page and bounce back to the fist page indicating that there are more pages to scroll to. I was wondering on how i could implement this?


Solution

  • You can use fakeDragBy method to achieve this effect:

    viewPager.beginFakeDrag();
    viewPager.fakeDragBy(offset); //offset in pixels. 
    viewPager.endFakeDrag();
    

    EDIT:

    I have made method for this:

    private int animFactor;
    private ValueAnimator animator = new ValueAnimator();
    
    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.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;
                }
            });
            animator.start();
        }
    }
    

    Example of usage:

    animateViewPager(pager, 10, 1000);
    

    Edit2: ValueAnimator is class for Api level 11. Also set pager adapter before calling this method.