Dibujar Ruta de acceso sobre lienzo utilizando gráficos vectoriales, no mapa de bits?

Actualmente estoy codificando una pequeña aplicación, que permite pintar con el dedo sobre una imagen dada. Estoy haciendo esto instanciando un mapa de bits del mismo tamaño que la imagen de fondo y luego crear un lienzo con este mapa de bits. En este lienzo se dibuja entonces.

Todo esto funciona y está bien, pero sería mejor tener los gráficos de dibujo como datos vectoriales, no como mapas de bits, para que el usuario pueda ampliar más adelante sin pasos feos en las líneas, etc.

¿Es esto de alguna manera posible?

Absolutamente. Hay una serie de clases que se beneficiarían de aprendizaje, pero los dos para empezar sería Path and Paint. Muy básicamente, para cada ruta individual en tu dibujo, instanciarás un Path y llamarás varios métodos en ese Path para añadir líneas, arcos, rectángulos, etc. Entonces, cada Path puede ser agregado a tu Canvas. Cada vez que añada una ruta de acceso a su lienzo, especifique un objeto de pintura que desea utilizar. El objeto Paint contiene todo tipo de información acerca de cómo se debe representar la ruta en el lienzo, incluyendo el ancho de trazo; color; Ya sea para acariciar, acariciar y llenar, o simplemente llenar; y así.

La adición de gráficos vectoriales a la lona utilizando Caminos, Pintura, etc es muy simple y probablemente obtendrá la caída de ella en un corto período de tiempo. Descubrí que un tutorial llamado Android Termómetro Vintage era una excelente manera de aprender; Es donde empecé.

Una vez que tengas la habilidad de dibujar trazados en línea recta hacia el lienzo, tal vez el siguiente paso sea traducir tus eventos de toque de pantalla en una serie de pequeños segmentos de ruta de línea recta.

Editar:

Bueno, por lo que de su comentario ahora entiendo que usted está familiarizado con Android Path, etc y me perdí el punto. Ahora entiendo el problema, creo: lo que quieres hacer es almacenar todos los gráficos dibujados como datos vectoriales en la memoria, de modo que una vez que las rutas se han generado (en respuesta a los toques de dedo del usuario), esas rutas se mantendrán En la memoria como datos vectoriales para que puedan ser recuperados una y otra vez y dibujados en el lienzo en diferentes escalas (niveles de zoom) o diferentes rotaciones, etc.

Actualmente estoy trabajando en un convertidor SVG como parte de una aplicación más grande. Ahora, mi convertidor SVG está diseñado para analizar el archivo SVG sólo una vez, la conversión de todos los datos del archivo SVG XML en los caminos respectivos, pintura, matrices, y así sucesivamente. Todos estos objetos vectoriales se almacenan en ArrayLists. También utilizo un conjunto de instrucciones simple que se guarda en memoria para describir el orden en el que se van a recuperar de memoria (pero eso está más allá del alcance de esto). Para dibujar todos los gráficos en el lienzo, todos los objetos Path, Paint, Matrix, etc. se extraen de las ArrayLists en el orden correcto y se aplican al Canvas. Esto significa que el análisis lento del archivo SVG sólo ocurre una vez; A partir de entonces, todos los gráficos vectoriales se pueden volver a dibujar rápidamente una y otra vez, a cualquier escala o transformación que desee.

Ahora, SVG y gran parte de lo que he pasado por ahí probablemente no sea relevante, pero mi punto básico es que, como lo que he hecho, podrías intentar almacenar todos tus objetos Path en una lista de algún tipo. A medida que el usuario toca la pantalla y genera Rutas en respuesta, además de aplicar esas Rutas al lienzo, también conserva todos los Rutas individuales en una lista (por ejemplo, ArrayList<Path> ). Tal vez se podrían guardar caminos individuales con su respectivo objeto Paint que describe el color particular, el ancho de trazo, etc. que se eligió cuando se dibujó la ruta particular. Siempre que el usuario elija acercar o alejar (o cualquier otro evento que requiera que el lienzo se vuelva a dibujar), simplemente volvería a reproducir todos los Caminos de la memoria y escribirlos en el lienzo. Como una simplificación adicional, si al usuario sólo se le permite una configuración de Paint única (por ejemplo, si el usuario sólo está autorizado a dibujar líneas blancas, por ejemplo, sin control sobre el ancho), podría incluso almacenar todas las rutas que el usuario extrae Un solo objeto Path, agregando cada ruta usando myPath.addPath (newPath) a medida que se dibuja cada uno.

Echa un vistazo a este hilo. SVG (pequeño?) Podría satisfacer sus necesidades.

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