Двойная буферизация в Java на Android с canvas и surfaceview
Как это сделать? Кто-нибудь может дать мне план?
из того, что я нашел в Интернете, похоже, в моей функции run ():
- создать растровое
- создайте холст и прикрепите его к растровому изображению
- lockCanvas()
- вызовите draw (canvas) и нарисуйте растровое изображение в задний буфер (как??)
- unlockCanvasAndPost()
это правильно? Если да, могу ли я получить небольшое объяснение; что означают ли эти шаги и как их реализовать? Я никогда не программировал для Android раньше, поэтому я настоящий нуб. И если это неправильно, то как мне это сделать?
2 ответов
Он уже дважды буферизован, это то, что делает вызов unlockCanvasAndPost (). Нет необходимости создавать растровое изображение.
шаги Группа Разработчиков 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);
вы получаете основной буфер, в который вы рисуете, не получая другой холст двойного буфера " на замке каждого держателя.