我试图永远在Android屏幕上绘制绿色或红色圆圈

时间:2015-03-29 18:54:57

标签: java android random android-canvas

我试图制作一款游戏,当用户点击绿色按钮时,它会消失,但是当用户点击红色按钮时,他们会无法在屏幕上连续显示多个随机按钮,这是我的代码

package com.Tripps.thesimplegame;

import java.util.Random;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.view.View;

public class DrawingView extends View {
    int mBackgroundColor = 000000;
    String yo = "#";
    Paint paint;
    final float radius = 230f;
    private long lastUpdated = 0;
    private int lastColor = Color.BLACK;

    public DrawingView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public DrawingView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public DrawingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }


    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas){

        String str = "Joke of the day";
        super.onDraw(canvas);
        paint = new Paint();
        Random random = new Random();
        Random randomTwo = new Random();

        //Rect ourRect = new Rect();
        Rect topRect = new Rect();
        Rect backGround = new Rect();

        paint.setColor(Color.BLACK);
        backGround.set(0,0,canvas.getWidth(),canvas.getHeight());
        canvas.drawRect(backGround, paint);


        while(System.currentTimeMillis() > lastUpdated + 1000){
            lastColor = random.nextInt(2) == 1 ? Color.RED : Color.GREEN;
            lastUpdated = System.currentTimeMillis();
            paint.setColor(lastColor);
            canvas.drawCircle(random.nextInt((int) (canvas.getWidth()-radius/2)) + radius/2f, random.nextInt((int) (canvas.getHeight()-radius/2)) + radius/2f, radius, paint);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

现在到底发生了什么,你想要与众不同?

无论如何,出于性能和可读性原因,我建议做一些事情:

  • 制作两个static int变量,CANVAS_WIDTH和CANVAS_HEIGHT,在onCreate中初始化它们,并在onDraw中使用它们,而不是每次都查询它们。

  • 对于背景,您不需要始终绘制与屏幕一样大的矩形。只需在xml中为DrawView提供黑色背景。

  • 为什么要使用while?它无论如何都会被执行一次,那么如何使用if

写完这篇文章后,我有一些可能只是你的解决方案。

首先,创建一个Handler animationHandler并在onCreate中初始化它。

制作

Runnable r = new Runnable{
    run(){
        invalidate();
    }
};

并在onDraw animationHandler.posteDelayed(r, FRAME_RATE);

中创建最后一个语句

同样使public static final int FRAME_RATE = 30为30 fps或= 15为60 fps。

现在你可以制作另一个public static final int SECOND,它实际上告诉你,在一秒钟结束之前你需要多长时间运行它,所以用1000/FRAME_RATE启动。

创建另一个变量timer,用0初始化,并输入timer ++;在你的onDraw中。

现在把它放在onDraw:

if(timer>=SECOND){
    //draw your circle here
    timer=0;
}

现在你只需询问用户是否触摸了一个圆圈。这是另一件大事,我可能会在我吃完之后做那件事,虽然我建议你自己做,但我认为这不是一项艰巨的任务。