Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


MultiViewPager + ZoomOutPageTransformer no funciona correctamente

Estoy tratando de implementar viewpager utilizando MultiViewPager y utilizando zoomoutpageTransformer google como efecto, el propósito es lograr algo como esta imagen:

Introduzca aquí la descripción de la imagen

Pero no puedo mostrar esas dos páginas en la derecha y la izquierda, cada vez que conseguir una sola página en medio de la pantalla! Este es mi código de paginador de vista:

mViewPager.setPageMargin( -64); mAdapter = new ViewPagerAdapter(getActivity(), mClasses); mViewPager.setPageTransformer(true, new ZoomOutPageTransformer()); mViewPager.setAdapter(mAdapter); 

Este es mi viewpager en xml:

 <ir.phzrobin.Utils.MultiViewPager android:id="@+id/viewPager" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_margin="20dp" app:matchChildWidth="@+id/textview_class_title" > </ir.phzrobin.Utils.MultiViewPager> 

Y este es mi diseño de página viewpager:

  <TextView android:id="@+id/textview_class_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_gravity="top" android:layout_margin="5dp" android:gravity="center_horizontal" android:padding="10dp" android:text="fsafjabf" android:textAlignment="gravity" android:textColor="@color/white" android:textSize="17sp" /> <TextView android:id="@+id/textview_class_teacher" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textview_class_title" android:layout_centerVertical="true" android:layout_margin="5dp" android:gravity="center_horizontal" android:padding="10dp" android:text="fsafjabf" android:textAlignment="gravity" android:textColor="@color/white" android:textSize="17sp" /> <ImageView android:id="@+id/button_options" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_margin="20dp" android:layout_marginRight="2dp" android:background="@drawable/overflow" /> </RelativeLayout> 

Lo que he intentado es esto y también la respuesta del desarrollador de multiviewpager de aquí nadie puede por favor me ayude a lograr una meta? Gracias

Esto es el adaptador del paginador de la visión:

 public class ViewPagerAdapter extends PagerAdapter { // ImageLoader imageLoader = ImageLoader.getInstance(); // DisplayImageOptions options; // private ImageLoadingListener imageListener; Context activity; List<Classes> items; public ViewPagerAdapter(Context activity, List<Classes> items) { this.activity = activity; this.items = items; } public void setItems(List<Classes> items) { this.items = items; notifyDataSetChanged(); } @Override public int getCount() { // TODO Auto-generated method stub return items.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { final int pos = position; // TODO Auto-generated method stub LayoutInflater inflater = (LayoutInflater) activity .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.row_viewpager, container, false); TextView mClassTitle = (TextView) view .findViewById(R.id.textview_class_title); mClassTitle.setText("عنوان درس: " + items.get(pos).getSubject()); mClassTitle.setTypeface(AppFont.GetAppFont()); ((TextView) view.findViewById(R.id.textview_class_teacher)) .setText("نام استاد: " + items.get(pos).getMasterName()); ((TextView) view.findViewById(R.id.textview_class_teacher)) .setTypeface(AppFont.GetAppFont()); RelativeLayout mLayout = (RelativeLayout) view .findViewById(R.id.rl_viewpager); mLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent _intent = new Intent(ContextVal.GetAppContext(), ClassNotes.class); _intent.putExtra("CLASSID", String.valueOf(items.get(pos).getID())); // set selected // item id // into // intent // activity // to use in // Classnotes // Activity! activity.startActivity(_intent); // open notes activity } }); ImageView mOverFlow = (ImageView) view.findViewById(R.id.button_options); mOverFlow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub PopupMenu popup = new PopupMenu(ContextVal.GetAppContext(), v); popup.getMenuInflater().inflate(R.menu.poupup_menu, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { if(item.getIcon() != null) {//edit item Intent _ClassWindow = new Intent(ContextVal.GetAppContext(), AddNewClass.class); _ClassWindow.putExtra("CLASSID", String.valueOf(items.get(pos).getID())); activity.startActivity(_ClassWindow); } else{//delete item AlertDialog.Builder builder = new AlertDialog.Builder( ContextVal.GetAppContext()); builder.setTitle("حذف کلاس"); builder.setMessage("آیا مطمعن هستید که میخواهید این درس را حذف کنید ؟"); builder.setPositiveButton("بله", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Do nothing but close the dialog Log.e("onClick", "YES"); DatabaseHandler _db = new DatabaseHandler(ContextVal .GetAppContext()); _db.deleteClass(items.get(pos)); _db.deleteClassNotes(items.get(pos).getID()); ContextVal.mViewFragment.RefreshViewPager(); // Refresh Items ! // and remove // deleted item from // user's eyes lol dialog.dismiss(); } }); builder.setNegativeButton("خیر", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do nothing Log.e("onClick", "NO"); dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); } return true; } }); popup.show(); } }); container.addView(view, 0); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView((View) object); } 

}

  • Fragmento en ViewPager no restaurado después de popBackStack
  • Agregando Viewpager como un encabezado a un listView
  • ViewPager con límites de páginas anteriores y siguientes
  • Outofmemeoryerror (viewpager + visiones de imagen)
  • Uso de SlidingPaneLayout de Android con ViewPager
  • La aplicación de Android se bloquea después de un tiempo utilizando Fragments y ViewPager
  • IllegalArgumentException: el radio debe ser> 0
  • Deshabilitar el desplazamiento de ListView al pasar ViewPager
  • 3 Solutions collect form web for “MultiViewPager + ZoomOutPageTransformer no funciona correctamente”

    Mire este ejemplo de diseño de fragmentos de fragmentos del ejemplo de MultiViewPager en GitHub:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}"> <FrameLayout android:id="@+id/vg_cover" android:layout_width="200dp" android:layout_height="match_parent" android:layout_centerInParent="true" tools:ignore="UselessParent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:background="@drawable/bg_page" android:scaleType="centerInside" android:src="@drawable/im_pixplicity" tools:ignore="ContentDescription" /> <TextView android:id="@+id/tv_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:gravity="center" /> </FrameLayout> </RelativeLayout> 

    Existe un RelativeLayout con ancho definido como match_parent y un FrameLayout interno con un ancho de 200dp explícito. Lo que hay en ese FrameLayout interno termina siendo la página de fragmentos.

    Su diseño tiene app:matchChildWidth="@+id/textview_class_title" pero no es un ViewGroup como el FrameLayout interno.

    Necesitas reescribir tu diseño de página de fragmentos para que tengas un ViewGroup interior con todas tus TextView dentro.

    Además, no llamar explícitamente setPageMargin() , MultiViewPager establece el margen de página internamente basado en todas las mediciones.

    Si sigue teniendo problemas para que esto funcione, recomiendo comenzar con la aplicación de ejemplo para MultiViewPager y modificarla hasta que obtenga los resultados de diseño que está buscando.

    Tengo fragmento múltiple en mi actividad, y uso FragmentStatePagerAdapter como PageAdapter y MultiViewPager como ViewPager.

    Estos códigos a continuación funcionan bien con ZoomOutPageTransformer de Google:

    Actividad:

      <com.tencent.qest.ui.components.MultiViewPager android:id="@+id/pager" android:layout_marginTop="20dp" android:layout_width="fill_parent" android:layout_height="fill_parent" app:matchChildWidth="@+id/card_container" android:layout_below="@+id/pager_numbers"/> 

    Fragmento:

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/card_container" android:layout_width="240dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/img_banner_card" android:layout_gravity="center_horizontal" android:minHeight="64dp" android:src="@drawable/place_holder_1" android:layout_marginBottom="-4dp" android:adjustViewBounds="false" android:scaleType="center" android:maxHeight="64dp" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context="com.tencent.qest.ui.fragments.SimpleInfoCardFragment" android:padding="18dp" android:background="@color/accent" android:gravity="center_vertical" android:layout_below="@+id/img_banner_card" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/txt_card_normal" android:text="10.发放入职礼品" android:id="@+id/tv_Title" android:textSize="30dp" android:paddingBottom="5dp" android:layout_gravity="left" android:paddingTop="5dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/txt_card_normal" android:text="地点:4楼休闲厅" android:id="@+id/tv_SubTitle" android:layout_gravity="center_horizontal|left" android:textSize="20dp" android:paddingBottom="5dp" android:paddingTop="4dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tips:必须完成前9项后才可以领取入职礼品哦!" android:id="@+id/tv_Content" android:layout_gravity="center_horizontal|left" style="@style/txt_card_normal" /> </LinearLayout> </RelativeLayout> 

    Acabo de hacer bien con este PageTransformer personalizado y MultiviewPager:

     public class ScalePageTransformer implements ViewPager.PageTransformer{ private static final float scaleMax = 0.8f; @Override public void transformPage(View view, float position) { if (position<=0){ float scale = scaleMax + (1+position)*0.2f; ViewCompat.setScaleX(view, scale); ViewCompat.setScaleY(view, scale); } else { float scale = scaleMax + (1-position)*0.2f; ViewCompat.setScaleX(view, scale); ViewCompat.setScaleY(view, scale); } } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.