Dibujando formas geométricas con Canvas en Android

02-03-2015 - Andrés Cruz

Dibujando formas geométricas con Canvas en Android
In english

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos.

Code

Un Canvas no es más que una superficie o lienzo en la cual se puede dibujar; con ayuda de las primitivas que ofrece la API de Canvas en Android es posible dibujar gráficos como líneas, círculos, óvalos, cuadrados, rectángulos e incluso textos, así como variar el color, trazado y tamaño; en esta entrada daremos los primeros pasos con la clase Canvas en Android.

Empezando con el Canvas en Android -el método onDraw()-

Primero hay que definir una clase que extienda de View la cual puede estar contenida dentro de la misma actividad o fuera de ella; a la clase la llamaremos MyView que sobreescriba el método onDraw(Canvas):

	public class MyView extends View {
		public MyView(Context context) {
			super(context);
		}

		@Override
		protected void onDraw(Canvas canvas) {
		}
	}

El método onDraw()

El método onDraw(Canvas canvas) especifica un parámetro Canvas cuya clase es la que permite dibujar las primitivas: líneas, círculos, rectángulos, etc.

Dibujando una figura:

Para dibujar una sencilla figura, debemos especificar una serie de métodos en conjunto con sus parámetros para cambiar el estilo de los trazados, colores, formas, etc:

  • Definir un paint/pintar para especificar parámetros como el color, grosor del trazo, etc; veamos algunos de ellos:
    • Paint.setColor: Establece un color para pintar; el método recibe como parámetro de tipo color; por ejemplo: Color.WHITE
    • Paint.setStyle: Establece un estilo para pintar; el método recibe un parámetro de tipo Paint.Style los cuales pueden ser:
      • FILL: Dibuja una figura rellena:
Canvas en Android -FILL-
  • STROKE: Dibuja solo el contorno de la figura:
Canvas en Android -STROKE-
  • FILL_AND_STROKE: Combinación de los dos anteriores.
  • El Canvas define los colores y formas geométricas a dibujar:
    • Canvas.drawColor(): Define un color.
    • Canvas.drawCircle(X,Y,Radius,Paint): Dibuja un círculo según: La posición (X y Y) radio (Radius) y Paint especificados.
    • Canvas.drawLine(startX,startY,stopX,stopY,Paint): Dibuja una línea según el segmento (startX,startY,stopX,stopY) y Paint especificados.
    • Canvas.drawRect(left, top, right, bottom, paint)): Dibuja un rectángulo según la posición (left,top,right,bottom) y Paint especificados.
    • Canvas.drawPaint(Paint): Pinta todo el Canvas según el Paint especificado.

Asociando el Canvas en la actividad

Una vez que que hayamos definido la vista la cual va a dibujar en el Canvas; el siguiente paso consiste en asociar una instancia de la clase MyView en la actividad mediante el método setContentView():

setContentView(new MyView(this));

Cuando queremos dibujar gráficos en Android podemos hacerlo dentro de la vista usando un layout (la manera tradicional de referencia un layout en Android):

setContentView(R.layout.activity_main);

O dibujar los gráficos directamente en un Canvas como hemos realizado en esta entrada:

setContentView(new MyView(this));

Como podrás notar, para ambos paso empleamos el método setContentView() pero con resultados muy diferentes.

¿Dibujar gráficos dentro de los layout o en el Canvas?

Se recomienda dibujar los gráficos en layout cuando se van a manejar gráficos simples sin mucho movimiento; pero, cuando se desea crear gráficos más ricos con más animaciones, movimientos, refrescamiento de los dibujos y un mayor rendimiento Android recomienda emplear el Canvas en su lugar.

Puedes encontrar una aplicación funcional que ejemplifica el funcionamiento de los códigos vistos anteriormente en nuestro repositorio de GIT:

Descargar fuente

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.

!Cursos a!

10$

En Udemy

Quedan días!

Ver los cursos
¡Hazte afiliado en Gumroad!

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
!Web Alojada en Hostinger!