ViewPager show next and before item preview on screen ViewPager show next and before item preview on screen android android

ViewPager show next and before item preview on screen


Finally, i did it :) I modify this answer Android - Carousel like widget which displays a portion of the left and right elements

You can look this code.

//pager settings          pager.setClipToPadding(false);          pager.setPageMargin(24);          pager.setPadding(48, 8, 48, 8);          pager.setOffscreenPageLimit(3);          pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {             @Override             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                Log.i("", "onPageScrolled: " + position);                CampaignPagerFragment sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position);                float scale = 1 - (positionOffset * RATIO_SCALE);                // Just a shortcut to findViewById(R.id.image).setScale(scale);                sampleFragment.scaleImage(scale);                if (position + 1 < pager.getAdapter().getCount()) {                   sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position + 1);                   scale = positionOffset * RATIO_SCALE + (1 - RATIO_SCALE);                   sampleFragment.scaleImage(scale);                }             }             @Override             public void onPageSelected(int position) {                Log.i("", "onPageSelected: " + position);             }             @Override             public void onPageScrollStateChanged(int state) {                Log.i("", "onPageScrollStateChanged: " + state);                if (state == ViewPager.SCROLL_STATE_IDLE) {                   CampaignPagerFragment fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem());                   fragment.scaleImage(1);                   if (pager.getCurrentItem() > 0) {                      fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() - 1);                      fragment.scaleImage(1 - RATIO_SCALE);                   }                   if (pager.getCurrentItem() + 1 < pager.getAdapter().getCount()) {                      fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() + 1);                      fragment.scaleImage(1 - RATIO_SCALE);                   }                }             }          });

//PagerAdapterpublic class CampaignPagerAdapter extends FragmentStatePagerAdapter {   SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();   public CampaignPagerAdapter(FragmentManager fm) {      super(fm);   }   @Override   public int getCount() {      return 5;   }   @Override   public Fragment getItem(int position) {      return new CampaignPagerFragment();   }   @Override   public Object instantiateItem(ViewGroup container, int position) {      Fragment fragment = (Fragment) super.instantiateItem(container, position);      registeredFragments.put(position, fragment);      return fragment;   }   @Override   public void destroyItem(ViewGroup container, int position, Object object) {      registeredFragments.remove(position);      super.destroyItem(container, position, object);   }   public Fragment getRegisteredFragment(int position) {      return registeredFragments.get(position);   }}

for ex: https://github.com/mrleolink/SimpleInfiniteCarousel..

Hello, One thing that is missing sampleFragment.scaleImage(scale); It is a method created in CampaignPagerFragment and it scale the fragment rootView..

e.g public void scaleImage(float scaleX) { rootView.setScaleY(scaleX); rootView.invalidate(); }


You can use PagerTransformer to ViewPager :-

mViewPager.setPageTransformer(false, new ViewPager.PageTransformer() {     @Override     public void transformPage(View page, float position) {             // do transformation here      }     });

Use this link for complete tutorial :-

http://andraskindler.com/blog/2013/create-viewpager-transitions-a-pagertransformer-example/

Hope this help you :)


there is the image of my first solution

viewPager.setPageMargin(100);viewPager.setPageTransformer(false, new ViewPager.PageTransformer(){    @Override    public void transformPage(View page, float position)    {        int pageWidth = viewPager.getMeasuredWidth() -            viewPager.getPaddingLeft() - viewPager.getPaddingRight();        int pageHeight = viewPager.getHeight();        int paddingLeft = viewPager.getPaddingLeft();        float transformPos = (float) (page.getLeft() -            (viewPager.getScrollX() + paddingLeft)) / pageWidth;        int max = pageHeight / 10;        if (transformPos < -1)        {            // [-Infinity,-1)            // This page is way off-screen to the left.            page.setAlpha(0.5f);// to make left transparent            page.setScaleY(0.7f);        }        else if (transformPos <= 1)        {            // [-1,1]            page.setScaleY(1f);        }        else        {            // (1,+Infinity]            // This page is way off-screen to the right.            page.setAlpha(0.5f);// to make right transparent            page.setScaleY(0.7f);        }    }});