Двойная буферизация в Java на Android с холстом и видом на поверхность - PullRequest
7 голосов
/ 30 июня 2011

Как можно это сделать? Может ли кто-нибудь дать мне схему?

Из того, что я нашел в Интернете, похоже, что в моей функции run ():

  1. создать растровое изображение
  2. создать холст и прикрепить его к растровому изображению
  3. lockCanvas ()
  4. вызовите draw (canvas) и выведите растровое изображение в задний буфер (как ??)
  5. unlockCanvasAndPost ()

Это правильно? Если так, могу ли я получить немного объяснения; что означают эти шаги и как их реализовать? Я никогда раньше не программировал на Android, поэтому я настоящий нуб. И если это не правильно, как мне это сделать?

Ответы [ 2 ]

17 голосов
/ 30 июня 2011

Это уже двойной буфер, это то, что делает вызов unlockCanvasAndPost (). Нет необходимости создавать растровое изображение.

2 голосов
/ 04 марта 2013

Шаги из Группы разработчиков Android говорят о том, что вам нужен буферный холст, на который отрисовываются все рендеры.

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);

Вы получаете основной буфер, в который вы рисуете, не получая различного двойного буфера холста 'на замке каждого держателя.

...