7. onMeassure()
● Determinar el tamaño de la vista dependiendo del padre
● Obtener el modo de Medición
○ EXACTLY (Igual que el padre)
○ AT_MOST (Como máximo el tamaño del padre)
○ UNESPECIFIED (Lo que la vista quiera)
● Definir las dimensiones de la custom view
8.
9. onSizeChange()
● Se llama cada vez que el tamaño cambia
● Cuando se llama la vista ya tiene tamaño
● Se puede obtener el width y el height de la vista
● Si se necesita inicializar algo dependiendo del tamaño
● El tamaño puede cambiar externamente
10. ● Es donde todo el pintado de la vista ocurre
● Realizar solo acciones de pintado
● No crear nuevos objetos si no es necesario
● 16ms (60 fps) es el tiempo usado para el pintado
● Cuidado con el overdraw
● Cuidado con invalidate() para forzar el pintado de la vista
onDraw()
11. ● El método onDraw() proporciona un canvas para pintar
● Canvas siempre contiene un bitmap donde pinta
● Proporciona una gran cantidad de métodos para el pintado
● Hay que proporcionarle un objeto Paint
Canvas
12. ● Contiene toda la configuración sobre el pintado
● Color
● Estilo del pintado
● Tamaño
● Antialiasing
Paint
13. Canvas: Pintando
X
Y
● width / 2 , height / 2
● 0 , 0
● Evitar usar píxeles en dimensiones
● Usar dim.xml
● Jugar con width y height
● Probar en varios dispositivos
21. Animación de carga: ValueAnimator
● Devuelve valores en un intervalo de tiempo
● Pueden ser int, float, etc...
● Update listener es donde se hará la animación
22. Animación de carga: start()
ValueAnimator
onUpdate
grade = value
invalidate
onDraw()
23. Animación cargando: Interpolators
● Define como son devueltos los valores
● Hay varias implementaciones en el SDK
Linear interpolator Accelerate Decelerate interpolator
26. Usando canvas: Path
● Contenedor para un conjunto de formas geométricas
● Muy versátil
● Se puede pintar en canvas usando: canvas.drawPath()
● Al ser un objeto este se puede guardar (Stack, Arrays, etc)
● Muy extensible
● Curva de Bézier
33. Loading Balls
● Uso de path
● Animaciones con path
● Uso varios ValueAnimators simultáneos
● Atributos Personalizados
https://github.com/glomadrian/loading-balls
40. Analizando el Rendimiento
● Normalmente son vistas muy vistosas
● No todos los móviles son de última generación
● Posible pintado duplicado (overdraw)
● Mucho trabajo en el método onDraw()
● No solo custom views
46. Detectando frames perdidos
● Muy útil , visual
● Línea verde: 16ms / 60 frames
● Por debajo: Frames pintados
● Por encima: Frames perdidos
● Colores por tipo de carga
Vistazo general a lo que son las custom views
Dónde podemos encontrarlas
Especial importancia a los atributos propios que dan mucha extensibilidad
Defender su uso
Diseños diferentes para las aplicaciones
Poder hacer cosas con otras vistas que previamente no estaban soportadas
Explicar que es un mundo diferente programar vistas que programar en android
Es divertido
Se aprende mucho
Primer constructor: Permitir la creación de vista desde código
Segundo Constructor: Creacion de vista desde XML pasándole sus atributos personalizados
Tercer Constructor: Creación de vista desde XML con atributos y usando un estilo personalizado.
Después de que la vista padre añade la vista hija se ejecuta onAttachedToindow()
Meassure() se usa para que las vistas puedan conocer tu tamaño
onMeassure() método para que los hijos puedan determinar el tamaño de la vista (es llamado desde meassure)
layout() llamado para asignar un tamaño a todas las vistas hijas
onLayout() cada vista hija debe asignar un tamaño y para eso se usa este método
dispathDraw() Cuando una vista padre realiza el draw usa este metodo para decirte a todas las vistas hijas que deben pintarse
draw() Método para forzar el pintado manual
onDraw() Método que se ha de sobrescribir para el pintado de la vista