繁体   English   中英

Android - 多线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM