Top Banner
Custom Views in Android using Canvas API
49

Custom views in android using canvas api

Feb 15, 2017

Download

Engineering

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Custom views in android using canvas api

Custom Views in Android using Canvas API

Page 2: Custom views in android using canvas api

@glomadrian

Adrián García Lomas github.com/glomadrian

Android Engineer

Page 3: Custom views in android using canvas api

Custom Views

● Extienden View / Viewgroup

● Progress, TextView, Animaciones, etc

● Atributos propios

● Funcionalidades propias

Page 4: Custom views in android using canvas api

¿Por qué deberías usarlas?

● Marca la diferencia!

● Diseño sin límites

● Extender funcionalidad de otras vistas

● Adaptar a tus necesidades

Page 5: Custom views in android using canvas api

Extendiendo View

Page 6: Custom views in android using canvas api

Ciclo de vida

Constructor

onAttachedToWindow()

measure()

onMeassure()

layout()

onLayout()

dispatchDraw()

draw()

onDraw()

invalidate()

requestLayout()

Page 7: Custom views in android using canvas api

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

Page 8: Custom views in android using canvas api
Page 9: Custom views in android using canvas api

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

Page 10: Custom views in android using canvas api

● 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()

Page 11: Custom views in android using canvas api

● 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

Page 12: Custom views in android using canvas api

● Contiene toda la configuración sobre el pintado

● Color

● Estilo del pintado

● Tamaño

● Antialiasing

Paint

Page 13: Custom views in android using canvas api

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

Page 14: Custom views in android using canvas api

Usando canvas: drawLine()

Page 15: Custom views in android using canvas api

Usando canvas: drawRect()

Page 16: Custom views in android using canvas api

Usando canvas: drawOval()

Page 17: Custom views in android using canvas api

Usando custom view

Page 18: Custom views in android using canvas api

Usando custom view

Page 19: Custom views in android using canvas api

Animación de carga

● drawArc()

● DashPathEffect

● ValueAnimator

● UpdateListener

● Interpolators

Page 20: Custom views in android using canvas api

Animación de carga: drawArc()

Page 21: Custom views in android using canvas api

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

Page 22: Custom views in android using canvas api

Animación de carga: start()

ValueAnimator

onUpdate

grade = value

invalidate

onDraw()

Page 23: Custom views in android using canvas api

Animación cargando: Interpolators● Define como son devueltos los valores

● Hay varias implementaciones en el SDK

Linear interpolator Accelerate Decelerate interpolator

Page 24: Custom views in android using canvas api

Animación cargando: Interpolators

Page 25: Custom views in android using canvas api

Dashed Circular Progress

https://github.com/glomadrian/dashed-circular-progress

● Uso de drawArc()

● Uso de interpolators

● Uso de Paint

● Custom ViewGroup

● drawBitmap()

● Atributos Personalizados

Page 26: Custom views in android using canvas api

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

Page 27: Custom views in android using canvas api

Usando canvas: drawPath()

Page 28: Custom views in android using canvas api

Path

● lineTo()

● moveTo()

● addArc()

● addOval()

● addRect()

● addPath()

● cubicTo()

● quadTo()

Page 29: Custom views in android using canvas api

Path: quadTo()

● startPoint

● x2, y2

● x1, y1

Page 30: Custom views in android using canvas api

Path: quadTo()

Page 31: Custom views in android using canvas api

Path: cubicTo()

● x3, y3

● x2, y2

● x1, y2

● startPoint

Page 32: Custom views in android using canvas api

Path: cubicTo()

Page 33: Custom views in android using canvas api

Loading Balls

● Uso de path

● Animaciones con path

● Uso varios ValueAnimators simultáneos

● Atributos Personalizados

https://github.com/glomadrian/loading-balls

Page 34: Custom views in android using canvas api

Atributos personalizados

● Reusabilidad

● Extensibilidad

● Esencial para librerías de este tipo

● Todo queda en el XML

Page 35: Custom views in android using canvas api

Atributos personalizados

Page 36: Custom views in android using canvas api

attrs.xml● Definir atributos para vistas personalizadas

● fichero attrs.xml dentro la carpeta values

● Atributos

○ dimension

○ color

○ boolean

○ string

○ reference

○ y más...

Page 37: Custom views in android using canvas api

Obteniendo atributos

Page 38: Custom views in android using canvas api

Declarando atributos personalizados

Page 39: Custom views in android using canvas api

Atributos Personalizados

Page 40: Custom views in android using canvas api

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

Page 41: Custom views in android using canvas api

Detectando overdraw

Page 42: Custom views in android using canvas api

Detectando overdraw

Page 43: Custom views in android using canvas api

Detectando overdraw

Page 44: Custom views in android using canvas api

Detectando overdraw

Page 45: Custom views in android using canvas api

Detectando frames perdidos

Page 46: Custom views in android using canvas api

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

Page 47: Custom views in android using canvas api

Detectando frames perdidos

Page 48: Custom views in android using canvas api

Detectando frames perdidos

Page 49: Custom views in android using canvas api

¿Preguntas?