Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura

Tengo un CustomViewPager dentro de un ObservableScrollView que se parece a esto:

Introduzca aquí la descripción de la imagen

Parece medir el fragmento pero no mide la altura del fragmento que está fuera de la pantalla. Así que no puedo desplazarme.

Este es el código para el CustomViewPager:

 public class CustomViewPager extends ViewPager { private View view; public CustomViewPager(Context context) { super(context); } public CustomViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST; View tab = getChildAt(getCurrentItem()); int width = getMeasuredWidth(); int tabHeight = tab.getMeasuredHeight(); if (wrapHeight) { // Keep the current measured width. widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); } int fragmentHeight = measureFragment(((Fragment) getAdapter().instantiateItem(this, getCurrentItem())).getView()); heightMeasureSpec = MeasureSpec.makeMeasureSpec(tabHeight + fragmentHeight + (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()), MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public int measureFragment(View view) { if (view == null) return 0; view.measure(0, 0); return view.getMeasuredHeight(); } } 

NOTA: Si agrego say + 1000 a heightMeasureSpec en super.onMeasure(widthMeasureSpec, heightMeasureSpec); Entonces puedo desplazar el tamaño del fragmento, así como cualquier espacio extra. Pero obviamente esto no es una solución preferida.

Aquí está mi archivo XML:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/infoBox" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="240dp"> <!-- Code for other views --> </LinearLayout> <com.github.ksoichiro.android.observablescrollview.ObservableScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="266dp" android:orientation="vertical"> <com.ui.customviewpager.CustomViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </com.github.ksoichiro.android.observablescrollview.ObservableScrollView> 

¿Cuál es el problema aquí? Parece que no soy el único con este problema.

Implementé parte de este diseño desde este enlace aquí

3 Solutions collect form web for “Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura”

ScrollView no debería tener margen para que scrollView se muestre correctamente. Parece que el margen no se tiene en cuenta cuando el scrollView mide su hijo.

Intente eliminar el margen de LinearLayout (puede utilizar relleno para reproducir el efecto).

¿Por qué no utiliza ObservableScrollView dentro del fragmento y poner el viewpager dentro de un TouchInterceptionFrameLayout (de la misma lib), a continuación, establezca setTouchInterceptionViewGroup del ObservableScrollView para ser el que contiene su viewpager y hacer la lógica en el TouchInterceptionListener en su actividad para moverlo hacia arriba Y hacia abajo con la animación con el fin de imitar un efecto de desplazamiento suave.

Espero que sea que su está buscando para alcanzar y esperanzadamente le ayudará.

Ps: Vea la aplicación de ejemplo guy y fuente ( Link ), es un poco complejo, pero estoy seguro de que encontrará algo.

Hola, no soy muy consciente de ObservableScrollView, pero de acuerdo a su problema que no son capaces de averiguar la altura del fragmento. Después de buscar mucho puedo encontrar tutorial para obtener la altura de los fragmentos.

Aquí está el enlace http://adanware.blogspot.in/2012/06/android-getting-measuring-fragment.html

Espero que esto te ayudará.

  • Android ViewPager con ScrollViews con ViewPagers dentro de ScrollViews
  • Desplazamiento en Horizontal ScrollView pierde el foco del elemento enfocado,
  • Desplácese hasta la última línea de TableLayout dentro de ScrollView
  • ViewPager dentro de un ScrollView no se desliza correclty
  • ¿Es posible soportar una función setScrollY () (ScrollView API 14) como función para los antiguos niveles de API?
  • Uso del método smoothScrollBy en la clase ScrollView de Android
  • ¿Puedo desplazar un ScrollView de forma programática en Android?
  • Cómo agregar el botón de acción flotante en la parte superior de scrollview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.