Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我试图在android屏幕上永远画一个绿色或红色的圆圈_Java_Android_Random_Android Canvas - Fatal编程技术网

Java 我试图在android屏幕上永远画一个绿色或红色的圆圈

Java 我试图在android屏幕上永远画一个绿色或红色的圆圈,java,android,random,android-canvas,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 androi

我想做一个游戏,当用户点击一个绿色按钮时,它就会消失,但当用户点击一个红色按钮时,它就会松开。我很难在屏幕上永远显示多个随机按钮。这是我的代码

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);
        }
    }
}

现在到底发生了什么,你想改变什么

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

  • 制作两个
    static int
    变量CANVAS\u WIDTH和CANVAS\u HEIGHT,在
    onCreate
    中初始化它们,并在
    onDraw
    中使用它们,而不是每次都查询它们

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

  • 为什么在使用
    的同时使用
    ?无论如何,它只会执行一次,那么如果使用
    if
    ,又如何呢

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

首先,制作一个
处理程序animationHandler
,并在onCreate中初始化它

制造

Runnable r = new Runnable{
    run(){
        invalidate();
    }
};
并在onDraw
animationHandler.postedlayed(r,FRAME_RATE)中生成最后一条语句

另外,对于30 fps,也可以使用
公共静态最终整数帧速率=30
,对于60 fps,则使用=15

现在,您可以创建另一个
公共静态final int SECOND
,它实际上告诉您需要多久运行一次,直到一秒钟结束,因此使用
1000/帧速率初始化

制作另一个变量timer,用0初始化,并放入timer++;在你的脑海里

现在把它放在onDraw中:

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

现在你只要问问用户是否碰到了一个圆圈。这是另一件大事,我可能会在吃完后再做,尽管我建议你自己做,我认为这不是一项太难的任务。

请参阅更新答案中的要点,我也将其粘贴到了我们的讨论链接中。这实际上是一项很难的任务。当用户单击某个内容时,我知道如何获取该内容的原因是通过主要的onCreate方法,然后我创建了一个按钮something=(Button)findViewById(R.id.whateverxmlfile);但是,由于我为圆圈创建了一个按钮,这在技术上有很大不同,我为颜色创建了一个按钮,它有一个int值,所以我需要一些其他的东西,而不是findviewbyd方法