Nun, ich werde versuchen, genau zu erklären, was ich so tun:Multi-Threading in der gleichen Leinwand
ich eine Bitmap in einer Leinwand in zufälligen Positionen entsprechend den Koordinaten des Bildschirms auf Touch zeichnen möchten, und Ich möchte, dass eine Nachricht (Text) immer dann angezeigt wird, wenn der Benutzer den Bildschirm berührt.
Also, wenn ein Text im selben Thread als ich für die Bitmap, wird es erscheinen und verschwinden direkt danach, und ich will es auf dem Bildschirm bleiben für ein paar Sekunden und die verschwinden. Meine erste Idee war es, Thread.sleep() zu benutzen, aber dafür muss ich nur einen Thread für den Text erstellen, oder ich werde mich auch mit der Bitmap anlegen.
Ich habe versucht, Multithreading in der gleichen Leinwand zu verwenden, aber ich weiß nicht wie. Kann mir bitte jemand erklären ...
, dass einige der Code ist die ich bisher habe:
private void init() {
// CREATE SURFACEHOLDER AND ADD THIS CLASS AS HIS CALLBACK
enemyHolder = getHolder();
enemyHolder.addCallback(this);
scoreHolder = getHolder();
scoreHolder.addCallback(this);
hasSurface = false;
}
public void resume() {
if (surfaceViewThread == null) {
surfaceViewThread = new SurfaceViewThread(); // CREATE A NEW
// THREAD
if (hasSurface)
surfaceViewThread.start(); // START OUR THREAD
}
if (secondThread == null) {
secondThread = new SecondThread();
if (hasSurface)
secondThread.start();
}
}
public void surfaceCreated(SurfaceHolder holder) {
hasSurface = true;
if (surfaceViewThread != null)
surfaceViewThread.start();
if (scoreShow == 1) {
if (secondThread != null)
secondThread.start();
}
}
// THREAD
private final class SurfaceViewThread extends Thread {
private boolean done;
SurfaceViewThread() {
super();
done = false;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
SurfaceHolder surfaceHolder = enemyHolder;
while (!done) {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(enemy1, enemy1X, enemy1Y, null); // DRAW
// FIRST
// ENEMY
// SECOND THREAD
private final class SecondThread extends Thread {
private boolean done;
SecondThread() {
super();
done = false;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
SurfaceHolder surfaceHolder = scoreHolder;
while (!done) {
Canvas canvas = surfaceHolder.lockCanvas();
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawText("xD", 50, 50, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
scoreShow = 0;
}
}
Danke für diese Antwort. Sieht jetzt viel klarer aus, aber sollte die ClearText-Methode kein Runable sein? – Kevin04PT
@Simon Bearbeiten Sie in Zukunft Ihre vorhandene Antwort, anstatt eine neue zu veröffentlichen. Sie könnten jetzt die Up-Abstimmung verlieren, die Sie bei der anderen Antwort erhalten haben, wenn sie kombiniert werden. –