Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable ViewPager scrolling animation

From the code here, I have a ViewPager that sets an adapter. Is there any way to disable the scrolling animation so that it just "jumps" to the new page when I swipe? I'm not looking to disable the whole scrolling function in onTouchEvent and onInterceptTouchEvent, just the sliding animation.

mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());

// Set up the ViewPager with the sections adapter.
mViewPager = (CustomViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
like image 728
KKO Avatar asked Aug 02 '14 16:08

KKO


2 Answers

I do not know if there is a clean solution. But you can use a trick and undo the standard page transformer with another transformer. The NoPageTransformer would look like this:

private static class NoPageTransformer implements ViewPager.PageTransformer {
    public void transformPage(View view, float position) {
        if (position < 0) {
            view.setScrollX((int)((float)(view.getWidth()) * position));
        } else if (position > 0) {
            view.setScrollX(-(int) ((float) (view.getWidth()) * -position));
        } else {
            view.setScrollX(0);
        }
    }
}

To add it to your ViewPager, call:

mViewPager.setPageTransformer(false, new NoPageTransformer());

Will work in SDK version 16 and above.

like image 115
stephan Avatar answered Sep 19 '22 15:09

stephan


Kotlin:

viewpager.setPageTransformer(false, FadePageTransformer())


inner class FadePageTransformer : ViewPager.PageTransformer {
    override fun transformPage(view: View, position: Float) {
        view.translationX = view.width * -position

        if (position <= -1.0f || position >= 1.0f) {
            view.alpha = 0.0f
            view.setVisibility(View.GONE);
        } else if (position == 0.0f) {
            view.alpha = 1.0f
            view.setVisibility(View.VISIBLE);
        } else {
            // position is between -1.0F & 0.0F OR 0.0F & 1.0F
            view.alpha = 1.0f - Math.abs(position)
            view.setVisibility(View.GONE);
        }
    }
}
like image 25
Rohit Shrivastava Avatar answered Sep 22 '22 15:09

Rohit Shrivastava