Pregunta

Estoy tratando de dibujar una animación. Para ello he extendido View y se reemplaza el método onDraw (). Lo que se espera es que cada vez onDraw () se llama el lienzo sería en el estado que lo dejé en y pude elegir para desactivarla o simplemente dibujar sobre partes de él (Esta es la forma en que funcionaba cuando he usado un SurfaceView ), pero cada vez que la tela se vuelve ya se aclaró. ¿Hay una manera que no puedo tenerlo despejado? O tal vez salvar al estado anterior en un mapa de bits, así que sólo puedo dibujar ese mapa de bits y luego dibujar sobre la parte superior de la misma?

¿Fue útil?

Solución

No estoy seguro de si hay una manera o no. Pero para mis vistas personalizadas que sea volver a dibujar todo lo que cada vez onDraw () se llama, o dibujar un mapa de bits y luego dibujar el mapa de bits a la lona (como usted sugiere en su pregunta).

Aquí es cómo lo hago

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}

Otros consejos

usted debe tener una mirada aquí para ver la diferencia entre la vista básica y SurfaceView. Un SurfaceView tiene una capa dedicada para el dibujo, que supongo que realiza un seguimiento de lo que ha dibujado antes. Ahora bien, si usted realmente quiere hacerlo en un punto de vista básico, usted podría tratar de poner cada elemento se dibuja en una matriz, como el exemple de superposición detallado del MapView . Se debe trabajar más o menos la misma manera

Sus expectativas no JIB w / realidad :) El lienzo no será la forma en que lo dejó, pero en blanco en lugar. Se puede crear un ArrayList de objetos que se puede extraer (canvas.drawCircle (), canvas.drawBitmap (), etc.), a continuación, iterar aunque el ArrayList en el OnDraw (). Soy nuevo en la programación de gráficos pero he utilizado esto en una pequeña escala. Tal vez hay una manera mucho mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top