Animación del dibujo de una ruta de acceso de lienzo en Android

Me gustaría animar el dibujo de un camino, es decir, que aparezca progresivamente en la pantalla. Estoy usando el lienzo y mi mejor conjetura hasta ahora es usar un ObjectAnimator para cuidar la animación. Sin embargo, no puedo averiguar cómo dibujar realmente el segmento correspondiente de la ruta en el método onDraw (). ¿Hay un método que permita hacer esto? ¿Tendría que implicar efectos de trayectoria para eso?

Edit: Usar un DashPathEffect y establecer sus intervalos "on" y "off" en la animación para cubrir la parte de la ruta que queremos dibujar para ese paso parece funcionar aquí, pero requiere asignar un nuevo DashPathEffect para cada paso del animación. Voy a dejar la pregunta abierta en caso de que haya una mejor manera.

Respondiendo a mi propia pregunta, como descubrí una manera satisfactoria de hacer eso.

El truco consiste en usar un ObjectAnimator para cambiar progresivamente la longitud actual del trazo, y un DashPathEffect para controlar la longitud del trazo actual. El DashPathEffect tendrá su parámetro de DashPathEffect inicialmente establecido en lo siguiente:

 float[] dashes = { 0.0f, Float.MAX_VALUE }; 

El primer flotador es la longitud del trazo visible, la segunda longitud de la parte no visible. La segunda longitud se elige para ser extremadamente alta. Los ajustes iniciales corresponden así a un golpe totalmente invisible.

A continuación, cada vez que el animador de objetos actualiza el valor de longitud de trazo, se crea un nuevo DashPathEffect con la nueva parte visible y se establece en el objeto Pintor y la vista se invalida:

 dashes[0] = newValue; mPaint.setPathEffect(new DashPathEffect(dashes, 0)); invalidate(); 

Por último, el método onDraw () utiliza este pintor para dibujar el camino, que sólo comprenderá la porción que queremos:

 canvas.drawPath(path, mPaint); 

El único inconveniente que veo es que debemos crear un nuevo DashPathEffect en cada paso de animación (ya que no pueden ser reutilizados), pero globalmente esto es satisfactorio – la animación es agradable y suave.

Por lo que sé, la única manera es comenzar con un camino vacío y tener un runnable que agrega puntos a la ruta a intervalos definidos, hasta que se completa.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.