El doble búfer en Java en Android con lona y surfaceview

¿Cómo hacer esto? Podría alguien darme un esquema?

De lo que he encontrado en línea, parece que en mi run() de la función:

  1. crear un mapa de bits
  2. crear un lienzo y adjuntarlo a la de mapa de bits
  3. lockCanvas()
  4. llamada draw(lienzo) y dibujar el mapa de bits en la espalda de búfer (¿cómo??)
  5. unlockCanvasAndPost()

Es esto correcto? Si es así, podría obtener un poco de explicación; lo que hacer estos pasos significan y cómo puedo aplicar? Nunca he programado para Android antes de lo que yo soy un verdadero novato. Y si no es correcto, ¿cómo puedo HACER esto?

OriginalEl autor Kalina | 2011-06-30

2 Kommentare

  1. 17

    Ya es de doble buffer, que es lo que la unlockCanvasAndPost() llamada lo hace. No hay necesidad de crear un mapa de bits.

    No acabo de conseguirlo. Así, me acabo de sacar todo lo que necesito entre bloquear y desbloquear y… doble búfer que sucede en su propia? No necesito llamar también ANTES de que me bloqueo? Lo siento, yo necesito esto se explica en la forma más básica posible…
    Cuando usted está dibujando en un Canvas después de lockCanvas() ha sido llamado, en realidad se está dibujando cosas en el siguiente marco, mientras que el corriente fotograma que se muestra. Un unlockCanvasAndPost() llamada cambiará el siguiente frame buffer con el actual marco de búfer en el fin de mostrar una actualización de Canvas.
    El mapa de bits de la porción es muy útil si usted quiere ser capaz de hacer zoom y mover el «worskpace» a su alrededor.

    OriginalEl autor Romain Guy

  2. 2

    Los pasos de Grupo De Desarrolladores De Android decir que necesita de un tampón de lienzo, a la que todos los renders se dibuja sobre.

    Bitmap buffCanvasBitmap;
    Canvas buffCanvas;
    
    //Creating bitmap with attaching it to the buffer-canvas, it means that all the changes //done with the canvas are captured into the attached bitmap
    tempCanvasBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    tempCanvas = new Canvas();
    tempCanvas.setBitmap(tempCanvasBitmap);
    
    //and then you lock main canvas
    canvas = getHolder().lockCanvas();              
    //draw everything you need into the buffer
    tempCanvas.drawRect.... //and etc
    //then you draw the attached bitmap into the main canvas
    canvas.drawBitmap(tempCanvasBitmap, 0, 0, drawView.getPaint());
    //then unlocking canvas to let it be drawn with main mechanisms
    getHolder().unlockCanvasAndPost(canvas);

    Usted está recibiendo el principal tampón, que se dibuja en sin conseguir diferentes de doble búfer de lienzo » en cada uno de los del titular de la cerradura.

    OriginalEl autor Rustem Galiullin

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea