我想每2秒钟生成一次圈子,在这种情况下为5,但我听不懂。该应用程序无需每2秒创建一个圆圈,而是等待10秒并将5个圆圈绘制在一起。我究竟做错了什么?谢谢你。

public class Juego extends SurfaceView{

boolean isItOK = false;

Paint paint;
int CantidadDeEsferas = 5;
int radio, alto, ancho;

public Juego(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);

    paint = new Paint();
}

public void onDraw(Canvas canvas){

    paint.setColor(Color.WHITE);
    canvas.drawRect(0, 0, getWidth(), getHeight(), paint);

    paint.setColor(Color.BLACK);

    for (int i=0; i<CantidadDeEsferas; i++) {

        Random r = new Random();
        alto = r.nextInt(canvas.getHeight());
        ancho = r.nextInt(canvas.getWidth());
        radio = r.nextInt(101 - 50) + 50;
        canvas.drawCircle(ancho, alto, radio, paint);
        run();
        isItOK = true;
    }
}

public void run(){
    while (isItOK){
        try
        {
            Thread.sleep(2000);
            isItOK = false;
        } catch (InterruptedException e) {

            e.printStackTrace();
        }

    }
}

}

最佳答案

通过在onDraw中调用run,您将暂停主线程。在主线程返回到框架中的事件循环之前,绘图不会出现。因此,您永远不要在主线程上调用sleep或其他阻止函数(基本上,您的应用程序似乎会死机)。如果要在2秒钟内执行某项操作,请创建一个Handler并使用postDelayed()向其发送消息。然后让消息的可运行状态增加 View 设置为绘制的圆圈数,然后使 View 无效并在接下来的2秒钟内发布另一条消息。然后, View 应在其onDraw中进行绘制,并检查变量以绘制要绘制的圆数。

关于android - 如何每2秒产生一圈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45896879/

10-14 09:45