Ну, я попытаюсь объяснить, что я притворяюсь:Многопоточность в том же холсте
Я хочу нарисовать битмап в холст в произвольной позиции по координатам экрана на ощупь, и Я хочу, чтобы сообщение (текст) отображалось каждый раз, когда пользователь прикасается к экрану.
Итак, если вы рисуете текст в том же потоке, что и для растрового изображения, он появится и исчезнет сразу после него, и я хочу, чтобы он оставался на экране в течение нескольких секунд и исчез. Моя первая идея состояла в том, чтобы использовать Thread.sleep(), но для этого мне нужно создать поток только для текста, иначе я тоже буду работать с Bitmap.
Я пытался использовать многопоточность в одном холсте, но я не знаю, как это сделать. Может кто-то пожалуйста, объясните мне ...
Вот некоторые из кода я получил до сих пор:
private void init() {
// CREATE SURFACEHOLDER AND ADD THIS CLASS AS HIS CALLBACK
enemyHolder = getHolder();
enemyHolder.addCallback(this);
scoreHolder = getHolder();
scoreHolder.addCallback(this);
hasSurface = false;
}
общественного недействительными резюме() {
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();
}
}
// НИТИ
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;
}
}
Спасибо за этот ответ. Выглядит намного понятнее, но не должен ли метод clearText быть Runnable? – Kevin04PT
@Simon В будущем отредактируйте существующий ответ вместо публикации нового. Теперь вы можете потерять голосование, которое вы получили по другому ответу, когда они объединены. –