Android - 多线程
Android - multithreading
在 android 上创建一个简单的游戏。
我必须在 canvas.
的随机位置随机绘制图片
问题在于出现和消失的图片。
每张图片应该在 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
}
}
在 android 上创建一个简单的游戏。 我必须在 canvas.
的随机位置随机绘制图片问题在于出现和消失的图片。 每张图片应该在 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
}
}