Entender el Canvas.saveLayer de Android (…)

Espero que los métodos saveLayer me permitan dibujar diferentes "capas" y, una vez que el dibujo haya terminado, fusione las capas con el lienzo en el orden que elija.

La pregunta obvia es "¿por qué no acaba de reorganizar sus operaciones de dibujo en su lugar?" La respuesta es que no puedo:

Tengo un Camino que necesito para dibujar sobre un lienzo. En el fondo / índice z más bajo quiero dibujar el camino cerrado y con unos pocos puntos adicionales usando un estilo de relleno. Luego, encima de eso, quiero dibujar un esquema de sólo los puntos que estaban originalmente en el Camino.

Puesto que no puedo deshacer la adición de puntos al Camino, mis únicas opciones son clonar el camino, o dibujar a una segunda capa que luego se puede colocar encima de todo lo demás.

SaveLayer () parece ofrecer esa funcionalidad, pero no se comporta de la manera que esperaba. El flujo básico de mis operaciones es así:

int overlay = canvas.saveLayer(...); // drawing operations for my uppermost layer ... int background = canvas.saveLayer(...); // drawing operations for my background layer ... // merge the offscreen background bitmap with the canvas: canvas.restoreToCount(background); // merge the offscreen overlay bitmap with the canvas: canvas.restoreToCount(overlay); 

Cuando se ejecuta el código, el orden del fondo y la superposición no han cambiado en absoluto; Lo que se obtiene primero es en la parte inferior y lo que se dibuja pasado está en la parte superior. Aún más extraño para mí es que puedo comentar completamente las dos llamadas a restoreToCount () y nada cambia. De acuerdo con el javadoc, nada debe ser dibujado en el lienzo hasta que se invoca un equilibrio restore ().

Obviamente estoy completamente malentendida de la función de este método. ¿Puede alguien ayudarme a entender el uso de saveLayer, o tal vez sugerir una forma alternativa de capa mis operaciones de dibujo?

¡Gracias! Mella

SaveLayer () no permite reorganizar las capas en un orden aleatorio. La única manera de hacerlo es dibujar en mapas de bits fuera de pantalla usted mismo. Tenga en cuenta que el padre de su vista llamará a save () / restore () alrededor de su llamada onDraw (), lo que hará que sus capas sean compuestas.

  • Establecer setChunkedStreamingMode en HttpURLConnection no puede entregar datos al servidor
  • Cómo publicar un valor booleano o entero utilizando volley
  • Ejemplo de OpenCV Template Matching en Android
  • ToneGenerator ralentiza la aplicación muy fuertemente
  • Mientras que (verdadero) lazo sin interrupción
  • Excepción OutOfMemory en la conversión de ByteArray a String?
  • String establecida en ArrayList?
  • Buenas prácticas para multi-threading
  • Obfuscate campos privados con ProGuard
  • ¿Cómo se persisten las cookies cuando se utiliza HTTPUrlConnection?
  • Excepción de puntero nulo en ActionBar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.