Función Cover Flow con vista pager android

Tengo que implementar la función de flujo de cubierta en mi aplicación similar a la aplicación Mobikwik cubierta de flujo

Flujo de la portada de la aplicación mobiwik y Con transacciones similares .

Ya he probado con Android CoverFlow biblioteca de widgets y pocos otros. Pero nada funcionaba como se esperaba.

¿Cómo puedo lograr este tipo de vista con ViewPager?

He creado mi clase ZoomOutPageTransformer , que está implementando PageTransformer y este conjunto en el buscapersonas utilizando el método setPageTransformer() . Por favor, consulte abajo ZoomOutPageTransformer.class

 public class ZoomOutPageTransformer implements PageTransformer { private static float MIN_SCALE = 1f; private static final float MIN_ALPHA = 0.7f; public ZoomOutPageTransformer(boolean isZoomEnable) { if (isZoomEnable) { MIN_SCALE = 0.85f; } else { MIN_SCALE = 1f; } } public void transformPage(View view, float position) { int pageWidth = view.getWidth(); int pageHeight = view.getHeight(); float vertMargin = pageHeight * (1 - MIN_SCALE) / 2; float horzMargin = pageWidth * (1 - MIN_SCALE) / 2; view.setScaleX(MIN_SCALE); view.setScaleY(MIN_SCALE); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(MIN_ALPHA); view.setTranslationX(horzMargin - vertMargin / 2); } else if (position <= 1) { // [-1,1] // Modify the default slide transition to shrink the page as well float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); vertMargin = pageHeight * (1 - scaleFactor) / 2; horzMargin = pageWidth * (1 - scaleFactor) / 2; if (position < 0) { view.setTranslationX(horzMargin - vertMargin / 2); } else { view.setTranslationX(-horzMargin + vertMargin / 2); } // Scale the page down (between MIN_SCALE and 1) view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); // Fade the page relative to its size. view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA)); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(MIN_ALPHA); view.setTranslationX(-horzMargin + vertMargin / 2); } } } 

Y en PagerActivity.java

 public class PagerActivity extends Activity { ViewPager pager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); pager = (ViewPager) findViewById(R.id.viewPager); // mContainer.setViewPager(pager); PagerAdapter adapter = new MyPagerAdapter(); pager.setPageTransformer(true, new ZoomOutPageTransformer(true)); pager.setAdapter(adapter); //Necessary or the pager will only have one extra page to show // make this at least however many pages you can see // pager.setOffscreenPageLimit(adapter.getCount()); pager.setOffscreenPageLimit(3); //A little space between pages pager.setPageMargin((int) getResources().getDimension(R.dimen.dimen_20)); //If hardware acceleration is enabled, you should also remove // clipping on the pager for its children. pager.setClipChildren(false); } //Nothing special about this adapter, just throwing up colored views for demo private class MyPagerAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { TextView view = new TextView(PagerActivity.this); view.setText("Item " + position); view.setGravity(Gravity.CENTER); view.setBackgroundColor(Color.argb(255, position * 50, position * 10, position * 50)); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return 9; } @Override public boolean isViewFromObject(View view, Object object) { return (view == object); } } } 

En main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/pager_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:background="#CCC" android:clipChildren="false"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:clipChildren="false" android:layout_width="match_parent" android:layout_height="300dp" android:layout_gravity="center" android:layout_marginLeft="@dimen/dimen_50" android:layout_marginRight="@dimen/dimen_50" /> </FrameLayout> </RelativeLayout> 

esto funciona para mi.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.