[英]Android - multithreading
在android上创建一个简单的游戏。 我必须在画布的随机位置绘制随机图片。
问题出在图片上并消失了。 每张照片应该在5秒内消失(在此期间,移动的英雄将不得不抓住它们)。
我试图在单独的线程中绘制图片,但它无法正常工作。
在这段代码中,我希望tmpBitmap在5秒内出现并消失。 (在此期间主线程肯定应该解决其他任务)如何做到核心?
public class Drawing extends View implements OnTouchListener {
Bitmap ball;
static Canvas myCanvas;
static Bitmap tmpBitmap;
public Drawing(Context context) {
super(context);
/// ... . ..
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.strawberry);
setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
myCanvas = canvas;
// . .. . . .
/// Trying to run drawing in separate thread and disappear in 5 sec.
MyThread t1 = new MyThread ();
t1.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t1.interrupt();
invalidate();
}
// ....
}
public class MyThread extends Thread {
public void run() {
while(!currentThread().isInterrupted()) {
Drawing.myCanvas.drawBitmap(Drawing.tmpBitmap, 100, 100, null);
}
}
}
我的善良,为什么你在地球上阻挡线程5秒......? 为什么你在onDraw里面无效? 你的游戏不会太顺利:P你应该做的事情如下:
long startTime;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
myCanvas = canvas;
// . .. . . .
/// Trying to run drawing in separate thread and disappear in 5 sec.
if (System.currentTimeMillis() - startTime >= 5000) {
// toggle your bitmap
startTime = System.currentTimeMillis();
{
}
或者,哪个更好,你应该使用ScheduledThreadExecutor 。 在视图构造函数中,您应该以固定速率启动此类执行程序。 运行的任务应该切换标志,说明是否应该淹没btmap。
boolean drawBitmap;
public Drawing(Context context) {
super(context);
/// ... . ..
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.strawberry);
setOnTouchListener(this);
// run task here that will switch flag
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
myCanvas = canvas;
// . .. . . .
if (drawBitmap) {
// draw your bitmap here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.