2011-04-28 5 views
18

He estado teniendo algunos problemas con el uso de grupos de vista personalizados y vistas personalizadas. Ya he buscado mucho para esto, pero si me perdí algo, siéntete libre de vincularme allí. Sí, he leído todo sobre Views, ViewGroups, measure y layout passes en el sitio web android dev, pero aún estoy confundido sin ningún código de muestra de Java.¿Alguien puede dar un buen ejemplo de un grupo de vista personalizado que contiene una vista personalizada con ejemplos de medida y diseño? (En Java)

1) Tengo entendido que child-views necesita implementar onMeasure y onLayout. ¿Esto significa que el Grupo de Vista padre necesita llamar manualmente a measure() y layout() para cada uno de sus hijos? De ser así, ¿dónde deberían ubicarse estas llamadas? ¿Deberían estar en los métodos Parent onMeasure y onLayout? Si es así, ¿dónde están las primeras llamadas de measure() y layout() que inician todo este proceso recursivo?

2) Veo que los parámetros de diseño de una vista infantil se pueden establecer usando algo como lo siguiente. ¿Debería este código colocarse dentro del enunciado del grupo de vista padre?

CustomView cust = new CustomView(context); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); 
cust.setLayoutParams(params); 

Si quiero establecer un MeasureSpec, ¿acabo de agregarlo como otra regla aquí?

3) ¿Está bien crear una instancia de una Vista personalizada y agregarla a CustomViewGroup desde dentro del código para CustomViewGroup, y si es así debería poner este código en el constructor CustomViewGroup? Si no, ¿se entiende que usted crea ViewGroups y luego agrega niños de una clase diferente?

4) ¿Es común practicar para llamar a draw() para cada una de mis vistas dentro del método onDraw() para CustomViewGroup?

Ahora, cuando ejecuto un código para dibujar un círculo, ejecuta el método de vista dibujar pero en realidad no aparece nada en la pantalla. Cuando lo agrego a un relativo Layout en lugar de mi CustomViewGroup, no tengo ningún problema ... Así que creo que me falta una pieza clave sobre cómo hacer que se muestren los viewgroups. (Sí, configuré ContentView para ViewGroup).

¡Gracias de antemano!

Editar: Por favor, no me muestres XML, estoy haciendo esto todo en Java.

+1

Es posible que desee dividir esto en 8 preguntas separadas o al menos un número de preguntas más pequeñas y más específicas. –

Respuesta

14

Le recomiendo que lea estos slides y vea esto video.

+0

¡La clase flowLayout me ayudó mucho! – AMerle

+0

Cualquier persona interesada en entrar en diseños personalizados (extendiendo ViewGroup) haría uso de esas diapositivas. Creo que se mostraron en un Google IO anterior teniendo en cuenta los autores de esas diapositivas. Gracias por el enlace. Recurso valioso – Armando

Cuestiones relacionadas