Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 21/03/12, 05:35:18
Avatar de timonoj
timonoj
Usuario invitado
Mensajes: n/a
 
Mensajes: n/a
Mencionado: comentarios
Tagged: hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:04:51 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007