Ich versuche, auf der Leinwand, die von den Oberflächenhalter zurückgegeben wird, zu zeichnen. lockCanvas()
Funktion, aber die Leinwand, die gerendert wird, ist einfach weiß.Nichts wird auf dem Canvas von SurfaceHolder angezeigt. lockCanvas() [Android]
Mein MySurface extends SurfaceView
und implements SurfaceHolder
Der Konstruktor:
MySurface(Context context){
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
displayThread = new MyDisplayThread(surfaceHolder);
}
Meine surfaceCreated()
Überschreibung
public void surfaceCreated(SurfaceHolder sH){
displayThread.start();
}
Meine surfaceDestroyed()
Überschreibung
public void surfaceDestroyed(SurfaceHolder sH){
boolean reset = true;
while(reset){
try{
displayThread.join();
reset = false;
}catch (InterruptedException e){}
}
}
Und der Faden, den ich für das Zeichnen verwendet werden: die Klassenvariablen sind:
SurfaceHolder surfaceHolder,
Paint paint,
boolean isRunning,
Canvas canvas = null
class MyDisplayThread extends Thread {
MyDisplayThread(SurfaceHolder sH){
surfaceHolder = sH;
isRunning = true;
paint = new Paint();
}
@Override
public void run(){
while(isRunning){
canvas = surfaceHolder.lockCanvas();
try{
myDraw();
}finally {
if(canvas != null) surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
public void myDraw(){
paint.setARGB(255,152,54,12);
canvas.drawText("RSFDS",100,100,paint);
canvas.drawRect(120,150,300,300,paint);
paint.setARGB(255,255,255,255);
}
}
Hat nicht geholfen, aber danke für den Versuch. – dev