Establecer la altura de Viewpager dentro de Scrollview en android

Tengo que mostrar un viewpager (una imagen y un texto debajo de la imagen en fila del paginador) dentro de un scrollview. Estoy descargando la imagen, el texto de la web y mostrando en las filas de buscapersonas. Envolví viewpager dentro de un srollview para apoyar el modo de paisaje también.

<com.xxx.myapp.android.ui.CustomScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:fadingEdge="none" android:fillViewport="true" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="800dp" android:layout_gravity="top" android:layout_marginTop="10dp" /> </LinearLayout> </com.xxx.myapp.android.ui.CustomScrollView> 

Y aquí está CustomScrollView . El problema es ¿Cómo puedo configurar la altura del buscador de vista en función de su altura de niños para que pueda desplazar la pantalla hasta que el elemento de paginador de vista termine solo. Si establezco la altura del paginador de vista en wrapcontent, no se muestra nada en viewpager. Si fijo algunos 800dp entonces puedo ver los artículos del paginador pero hay el desplazamiento innecesario en la pantalla. No quiero que mi scrollview se despliegue más allá de la altura de los niños del buscapersonas. Por favor, ayúdame.

Envuelva su fila de paginación dentro de CustomScrollView en lugar de envolver el paginador dentro de CustomScrollview. Y no fijar la altura de Viewpager como Piyush Gupath comentó. Utilice wrapcontent.

Para fijar la altura del viewpager podemos personalizar la clase viewpager.

 public class WrapContentViewPager extends ViewPager { private int mCurrentPagePosition = 0; public WrapContentViewPager(Context context) { super(context); } public WrapContentViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try { View child = getChildAt(mCurrentPagePosition); if (child != null) { child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); } } catch (Exception e) { e.printStackTrace(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void reMeasureCurrentPage(int position) { mCurrentPagePosition = position; requestLayout(); } } 

Donde esta reMeasureCurrentPage debe llamarse en viewpager onPageSelected callback.and CustomScrollView es la vista principal.

 mViewPager = new ViewPager(mContext) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); View view = getChildAt(this.getCurrentItem()); if (view != null) { view.measure(widthMeasureSpec, heightMeasureSpec); } setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view)); } private int measureHeight(int measureSpec, View view) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { // set the height from the base view if available if (view != null) { result = view.getMeasuredHeight(); } if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } }; 

Prueba de esta manera

 <com.xxx.myapp.android.ui.CustomScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:fadingEdge="none" android:fillViewport="true" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="top" android:layout_marginTop="10dp" /> </LinearLayout> </com.xxx.myapp.android.ui.CustomScrollView> 
  • Infinite ViewPager
  • Mostrar fragmento viewpager dentro de un fragmento
  • Android ViewPager al pasar la última pantalla
  • ¿Cómo puedo añadir un fragmento a un ViewPager? AddView bloquea mi aplicación
  • Funciones de llamada dentro de fragmentos en Android
  • Cómo invertir la dirección de viewPager de izquierda a derecha?
  • Sincronizar todo el ListView en un ViewPager
  • Deslizar un elemento a la vez
  • Cómo pasar JSON Array utilizando objeto JSON
  • Pestañas de ActionBar con ViewPager y diseño del marco
  • Cómo evitar que viewpager inicialice la vista siguiente de forma predeterminada en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.