View translation in sliding a ViewPager

前端 未结 4 1147
猫巷女王i
猫巷女王i 2021-02-13 11:26

I was reading an example on customizing ViewPager\'s sliding page animation that entails translating the page(View) to a certain amount. The example is

4条回答
  •  臣服心动
    2021-02-13 11:51

    GitHub provide a library for animation that you want without any calculations
    You don't need to create your custom ViewPager PageTransformer
    Simply add below library in your app/build.gradle file.

    compile 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar'
    

    MainActivity.java

    public class MainActivity extends Activity {
    
        private static final String KEY_SELECTED_PAGE = "KEY_SELECTED_PAGE";
        private static final String KEY_SELECTED_CLASS = "KEY_SELECTED_CLASS";
    
        private int mSelectedItem;
        private ViewPager mPager;
        private PageAdapter mAdapter;
    
        @SuppressWarnings("deprecation")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            int selectedPage = 0;
            if (savedInstanceState != null) {
                mSelectedItem = savedInstanceState.getInt(KEY_SELECTED_CLASS);
                selectedPage = savedInstanceState.getInt(KEY_SELECTED_PAGE);
            }
    
    
            setContentView(R.layout.activity_main);
    
            mAdapter = new PageAdapter(getFragmentManager());
    
            mPager = (ViewPager) findViewById(R.id.container);
            mPager.setAdapter(mAdapter);
            try {
                mPager.setPageTransformer(true, new TransformerItem(ZoomOutSlideTransformer.class).clazz.newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            mPager.setCurrentItem(selectedPage);
    
        }
    
    
        public static class PlaceholderFragment extends Fragment {
    
            private static final String EXTRA_POSITION = "EXTRA_POSITION";
            private static final int[] COLORS = new int[] { 0xFF33B5E5, 0xFFAA66CC, 0xFF99CC00, 0xFFFFBB33, 0xFFFF4444 };
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                final int position = getArguments().getInt(EXTRA_POSITION);
                final TextView textViewPosition = (TextView) inflater.inflate(R.layout.fragment_main, container, false);
                textViewPosition.setText(Integer.toString(position));
                textViewPosition.setBackgroundColor(COLORS[position - 1]);
    
                return textViewPosition;
            }
    
        }
    
        private static final class PageAdapter extends FragmentStatePagerAdapter {
    
            public PageAdapter(FragmentManager fragmentManager) {
                super(fragmentManager);
            }
    
            @Override
            public Fragment getItem(int position) {
                final Bundle bundle = new Bundle();
                bundle.putInt(PlaceholderFragment.EXTRA_POSITION, position + 1);
    
                final PlaceholderFragment fragment = new PlaceholderFragment();
                fragment.setArguments(bundle);
    
                return fragment;
            }
    
            @Override
            public int getCount() {
                return 5;
            }
    
        }
    
        private static final class TransformerItem {
    
            final String title;
            final Class clazz;
    
            public TransformerItem(Class clazz) {
                this.clazz = clazz;
                title = clazz.getSimpleName();
            }
    
            @Override
            public String toString() {
                return title;
            }
    
        }
    
    }
    

    activity_main.xml

    
    

    fragment_main.xml

    
    

    I hope this may help you.:-)

提交回复
热议问题