У меня есть класс, расширяющий SurfaceView, я передаю держатель "this.getHolder ()" ранее живому и работающему потоку. у этого потока есть все oop, в этом l oop я хочу один раз нарисовать фон и другие растровые изображения поверх этого фона:
public void run() {
try {
Paint p = new Paint();
p.setColor(Color.MAGENTA);
p.setStyle(Paint.Style.FILL);
Rect dty = null;
int i = 0;
while(!Thread.currentThread().isInterrupted()) {
if(Loader.getInstance().isPlaying()) {
// GAME LOOP HERE
// only performs drawing operations while surface is not destroying
synchronized (Loader.getInstance().getHolder()) {
if(Loader.getInstance().getHolder() != null) {
if(!Loader.getInstance().isBgDrawn()) {
dty = null;
c = Loader.getInstance().getHolder().lockCanvas(dty);
if(c != null) {
c.drawRGB(100,0,0);
Loader.getInstance().setBgDrawn(true);
Loader.getInstance().getHolder().unlockCanvasAndPost(c);
}
}
else {
dty = new Rect(0,0,200,200);
if(dty!=null) c = Loader.getInstance().getHolder().lockCanvas(dty);
if(c != null) {
if(dty!=null)c.drawRGB(0,0,100);
Loader.getInstance().getHolder().unlockCanvasAndPost(c);
}
}
}
}
}
Thread.sleep(1000);
}
throw new InterruptedException();
} catch (InterruptedException ie) {
// CLEAN THIS RUNNABLE HERE
Log.println(Log.ASSERT, TAG, "run: CLEANING GAME RUNNABLE");
}
}
Но, когда нет фона (bgDrawn === true), holder.lockCanvas (dty) игнорирует эти dty и dr aws по всей поверхности.
правильно ли я применяю грязный прямоугольник внутри lockCanvas (dty)? Просто хочу нарисовать один раз фон, а затем мелочи над этим фоном, и все это в отдельном потоке.