2010-08-31 11 views
27

Tengo un ScrollView personalizado (extended android.widget.ScrollView) que utilizo en mi diseño. Quiero medir la altura total de los contenidos de esta vista de desplazamiento. getHeight() y getMeasuredHeight() no me dan los valores correctos (números demasiado altos).Android: altura total de ScrollView

Información de fondo: deseo determinar cuánto ha recorrido el usuario. Yo uso onScrollChanged para obtener el valor de X, pero necesito saber un porcentaje, así que necesitaré la altura total de la barra de desplazamiento.

¡Muchas gracias! Erik

+0

Tome un vistazo a http://stackoverflow.com/questions/3513594/android-scrollview-setonscrolllistener-like-listview para obtener una pista – Mikpa

Respuesta

73

A ScrollView siempre tiene 1 hijo. Todo lo que necesita hacer es conseguir la altura del niño para determinar la altura total:

int totalHeight = scrollView.getChildAt(0).getHeight(); 
+1

Mi punto de vista del niño devuelve 0 aunque se desplaza. –

+2

¿Pediste su altura en onCreate o antes de que se haya medido? Intente obtener la altura más adelante, vea esta pregunta: http://stackoverflow.com/questions/7733813/how-can-you-tell-when-a-layout-has-been-drawn – satur9nine

+0

Gracias, eso funcionó :) –

0

Ver la fuente de ScrollView. Desafortunadamente, este método es privado, pero puedes copiarlo en tu propio código. Tenga en cuenta que otras respuestas no toman en cuenta el relleno

private int getScrollRange() { 
    int scrollRange = 0; 
    if (getChildCount() > 0) { 
     View child = getChildAt(0); 
     scrollRange = Math.max(0, 
       child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop)); 
    } 
    return scrollRange; 
} 
Cuestiones relacionadas