gpt4 book ai didi

java - 尝试获取在android中绘制的每个随机圆的x,y坐标

转载 作者:行者123 更新时间:2023-12-01 11:42:50 25 4
gpt4 key购买 nike

我正在制作一款会在屏幕上创建随机圆圈的游戏。随机创建的圆圈的值为红色或绿色。

我的问题是,我不仅希望能够确定用户何时单击其中一个圆圈,还希望能够确定他们最终单击的圆圈(红色或绿色)。我的主要问题是试图找到将要绘制的圆的 x 和 y。

这是我的代码:

    public class DrawingView extends View {



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

}
RectF rectf = new RectF(0, 0, 200, 0);

private static final int w = 100;
public static int lastColor = Color.BLACK;
private final Random random = new Random();
private final Paint paint = new Paint();
private final int radius = 230;
private final Handler handler = new Handler();
public static int redColor = Color.RED;
public static int greenColor = Color.GREEN;


private final Runnable updateCircle = new Runnable() {
@Override
public void run() {
lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
paint.setColor(lastColor);
invalidate();
handler.postDelayed(this, 1000);

}
};



@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
handler.post(updateCircle);
}

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacks(updateCircle);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// your other stuff here
// code below works when its here

float randomWidth =(int) (random.nextInt(Math.abs(getWidth()-radius/2)) + radius/2f);
float randomHeight = (random.nextInt((int)Math.abs((getHeight()-radius/2 + radius/2f))));
canvas.drawCircle(randomWidth, randomHeight + radius/2f, radius, paint);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
int x = event.getX();
int y = event.getY();
if(isInsideCircle(x, y)){
//Do your things here
}
return true;
}

private boolean isInsideCircle(int x, int y){
if (((x - randomWidth)^2 + (y - randomHeight)^2) < radius^2)
return true;
return false;
}



}

下面的代码不起作用

public class DrawingView extends View {



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

}
RectF rectf = new RectF(0, 0, 200, 0);

private static final int w = 100;
public static int lastColor = Color.BLACK;
private final Random random = new Random();
private final Paint paint = new Paint();
private final int radius = 230;
private final Handler handler = new Handler();
public static int redColor = Color.RED;
public static int greenColor = Color.GREEN;
//its right below here the code compiles perfectly, but gets errors in logcat
int randomWidth =(int) (random.nextInt(Math.abs(getWidth()-radius/2)) + radius/2f);
int randomHeight = (random.nextInt((int)Math.abs((getHeight()-radius/2 + radius/2f))));


private final Runnable updateCircle = new Runnable() {
@Override
public void run() {
lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
paint.setColor(lastColor);
invalidate();
handler.postDelayed(this, 1000);

}
};



@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
handler.post(updateCircle);
}

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacks(updateCircle);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// your other stuff here
canvas.drawCircle(randomWidth, randomHeight + radius/2f, radius, paint);
}

public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
if(isInsideCircle(x, y)){
//Do your things here
}
return true;
}

private boolean isInsideCircle(int x, int y){
if (((x - randomWidth)^2 + (y - randomHeight)^2) < radius^2)
return true;
return false;
}



}

这是日志猫

04-01 03:41:48.856: E/AndroidRuntime(4010): FATAL EXCEPTION: main
04-01 03:41:48.856: E/AndroidRuntime(4010): Process: com.Tripps.thesimplegame, PID: 4010
04-01 03:41:48.856: E/AndroidRuntime(4010): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Tripps.thesimplegame/com.Tripps.thesimplegame.Main}: java.lang.IllegalArgumentException: n <= 0: 0
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread.access$800(ActivityThread.java:144)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.os.Handler.dispatchMessage(Handler.java:102)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.os.Looper.loop(Looper.java:135)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread.main(ActivityThread.java:5221)
04-01 03:41:48.856: E/AndroidRuntime(4010): at java.lang.reflect.Method.invoke(Native Method)
04-01 03:41:48.856: E/AndroidRuntime(4010): at java.lang.reflect.Method.invoke(Method.java:372)
04-01 03:41:48.856: E/AndroidRuntime(4010): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
04-01 03:41:48.856: E/AndroidRuntime(4010): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
04-01 03:41:48.856: E/AndroidRuntime(4010): Caused by: java.lang.IllegalArgumentException: n <= 0: 0
04-01 03:41:48.856: E/AndroidRuntime(4010): at java.util.Random.nextInt(Random.java:182)
04-01 03:41:48.856: E/AndroidRuntime(4010): at com.Tripps.thesimplegame.DrawingView.<init>(DrawingView.java:38)
04-01 03:41:48.856: E/AndroidRuntime(4010): at com.Tripps.thesimplegame.Main.onCreate(Main.java:30)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.Activity.performCreate(Activity.java:5933)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
04-01 03:41:48.856: E/AndroidRuntime(4010): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
04-01 03:41:48.856: E/AndroidRuntime(4010): ... 10 more

最佳答案

您所说的randomWidthrandomheight实际上是圆的x和y坐标。
这是方法标志:

canvas.drawCircle(x, y, radius, paint);

要检查用户是否在圆圈内单击,您可以执行以下操作:

public boolean onTouch(View v, MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
if(isInsideCircle(x, y)){
//Do your things here
}
return true;
}

private boolean isInsideCircle(int x, int y){
if (((x - center_x)^2 + (y - center_y)^2) < radius^2)
return true;
return false;
}

关于java - 尝试获取在android中绘制的每个随机圆的x,y坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com