android - 如何每2秒生成一个圆圈

标签 android multithreading android-studio canvas geometry

我想每 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/

相关文章:

android - ADB:使用 Uri 中的多个参数从 adb 启动 VIEW Intent

java - ToggleButton 能否更改同一 Activity 中其他按钮的功能?

android - 如何判断指纹扫描质量好不好

java - 如何使用百分比和消息而不是弃用的 ProgressDialog 创建自定义 progressDialog

python - 始终运行多个进程/线程,访问 sqlite3 数据库直到满足条件

java - Android中Thread.currentThread().getId()和Process.myTid()的区别

java - Android 指纹登录 - 可能与否

android - 为什么 ImageView.setImageMatrix() 不起作用?

android - 如何通过命令行对 apk 进行签名

java - 多线程中的共享锁-Java