Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 21/03/12, 05:35:18
Array

[xs_avatar]
timonoj
Usuario invitado
 
Mensajes: n/a

Alguien me puede explicar cómo funciona ViewGroup?

Veamos, me estoy volviendo loco. Mi idea es hacer cuatro cuadraícos en forma de matriz 2x2, y empotrar en cada cuadrado un scrollview, para meter listas de texto. La vaina es que los cuadrados tienen que poderse cambiar de tamaño, estirarlos y encogerlos con el dedo, así que estoy tratando de hacer mi propio View, heredando de ViewGroup.

Ahora, según creo haber entendido:
ViewGroup implementa onMeasure(), que se ejecuta cuando el sistema llama a measure(). Haciéndole un override a onMeasure puedes medir tus layouts hijo para ponerles medidas concretas y tal en base a las medidas totales que te pasa el sistema, este sería el paso para tomar mediciones y poner medidas a cada uno. Si tocas onMeasure() tienes que tener al final una llamada setMeasuredDimension(ancho, alto), para devolverlas medidas de tu View.
Es esto correcto??
ViewGroup igualmente implementa onLayout(), que se ejecuta cuando el sistema va a dibujar las diferentes layouts. SI lo modificas, habrás de llamar a todos los hijos de tu View uno por uno, en el estilo de View.layout(izq, arriba, der, abajo).

Está bien o se me está yendo la pinza?
En base a esto, yo me creo a manopla en miViewGroup cuatro ScrollViews. En el constructor tengo la paja mental de que no sé cómo preasignar una medida inicial a los layouts, dado que onMeasure aún no ha pasado (me parece entender que se dibujan con dimensión cero). He intentado llamar measure() a manopla, pero hay algo que se me escapa. Alguien que pilote de esto me puede ayudar?

Código:
public class MatrixViewGroup extends ViewGroup {
    ScrollView svTopLeft, svTopRight, svBottomLeft, svBottomRight;
    int widthSize, heightSize;
    public MatrixViewGroup(Context context) {
        super(context);
        svTopLeft = new ScrollView(context);
        svTopRight = new ScrollView(context);
        svBottomRight= new ScrollView(context);
        svBottomLeft= new ScrollView(context);
        svTopLeft.setBackgroundColor(0x7ac16c);
        svTopRight.setBackgroundColor(0xe19d5a);
        svBottomLeft.setBackgroundColor(0xdbdb8d);
        svBottomRight.setBackgroundColor(0x90a9ca);
        addView(svTopLeft);
        addView(svTopRight);
        addView(svBottomLeft);
        addView(svBottomRight);
        
        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(480, MeasureSpec.EXACTLY);
        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(720, MeasureSpec.EXACTLY);
        measure(widthMeasureSpec,heightMeasureSpec);
//al llamar measure, más abajo tengo onMeasure(int widthMeasureSpec, int heightMeasureSpec), en el que tras hacer algunas cosas
//asigno heightSize y widthSize en función a los parámetros que llegan de widthMeasureSpec y heightMeasureSpec
        
        LayoutParams lp = new LayoutParams(heightSize/2, widthSize/2);
        svTopLeft.setLayoutParams(lp);
Cualquier ayuda es bienvenida. De lo contrario, alguien sabe ande puedo preguntar? Igual mexplico fatal, pero en StackOverflow han pasado de mi calavera :/

Última edición por timonoj Día 21/03/12 a las 05:40:13.
Responder Con Cita


Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 11:59:55 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /