Algunos conceptos básicos

Aunque Android dispone de un amplio abanico de vistas, crear tus propias vistas puede ser de gran utilidad para diseñar tus propios controles personalizados. En muchos tipos de aplicaciones puede ser imprescindible; por ejemplo, en un juego o cuando tengas que mostrar información gráfica.

Antes de comenzar puede resultar interesante que revises cómo se organiza la jerarquía de vistas en Android y los métodos disponibles en la clase View.

Vídeo[Tutorial]: Los atributos de la clace View.

Si has seguido el curso básico, puede ser interesante que recuerdes como el peso del juego Asteroides recaía en una vista, la clase VistaJuego. Esta clase era responsable de dibujar los elementos del juego y también se encargaba de recoger eventos del usuario desde la pantalla táctil o los sensores. Su estructura básica se resume a continuación:

public class VistaJuego extends View {

    @Override void onSizeChanged();  //Nos informan de nuestro tamaño

    @Override void onDraw();         //Dibujamos la vista

    @Override boolean onTouchEvent();//Se ha pulsado la pantalla

 }

La programación orientada a objetos nos ofrece muchas facilidades para reutilizar clases ya existentes. Vamos a disponer de varias alternativas para crear nuevas vistas:

  • Crear una vista desde cero extendiendo la clase View.
  • Modificar una vista ya existente.
  • Realizar una vista como una composición de varias vistas.
  • Heredar de ViewGroup para crear nuestro propio layout.

En primer lugar es interesante que estés familiarizado con la clase View. Vamos a abordar la creación de vistas de forma paulatina. Empezaremos con los aspectos más sencillos y dejaremos aspectos más complejos para el final. No obstante, para tener una vista general, se enumeran a continuación todos los pasos a seguir para crear una vista personalizada:

 

1. Seleccionar qué clase usaremos como padre. El caso más general es heredar de View.

2. Si tienes previsto reutilizar la vista en otras aplicaciones, sería interesante que esta fuera personalizable. Para ello, puedes crear nuevos atributos específicos de tu vista. Esto te permitirá crear tu vista desde XML o el editor visual de forma sencilla.

3. Nuestra vista estará dentro de un layout y tendrá que adaptarse al tamaño disponible. En muchos casos resulta muy importante saber el tamaño que nos han asignado (onSizeChanged()) o indicar a nuestro contenedor nuestras restricciones de tamaño (onMeasure()).

4. Una vista como su nombre indica que ha de ser dibujada. Lo haremos reescribiendo en método onDraw().

5. Es posible que quieras que tu vista reaccione ante ciertos eventos como pulsaciones en pantalla, teclado o sensores. Tendrás que escribir los escuchadores o manejadores de eventos correspondientes (onTouchEvent(), onSensorChange()…).

6.  Una vez que el usuario ha introducido una entrada, tendrás que dar acceso a esta información. Recuerda que toda clase ha de tener métodos get…() y set…() para cambiar o consultar su información interna.

7. Es muy frecuente que quieras que tu vista genere eventos. En muchos casos queremos que cuando el usuario modifica una entrada se avise de este cambio. Para conseguirlo, crearemos nuestro propio escuchador de eventos.

Pasemos a ver varias alternativas en la creación de nuevas vistas. Es bastante improbable que tengas que crear un nuevo tipo de layout, dado que ya cubren la práctica totalidad de las necesidades. Por lo tanto, este tipo de vistas no son incluidas en el texto. Empezaremos por la composición de varias vistas, luego modificaremos una ya existente y finalmente crearemos una nueva vista desde el principio. Este orden nos permitirá introducir los nuevos conceptos poco a poco.