Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 如何在每个按钮点击后添加一个圆圈?_Java_Android_Xml_Button_Canvas - Fatal编程技术网

Java 如何在每个按钮点击后添加一个圆圈?

Java 如何在每个按钮点击后添加一个圆圈?,java,android,xml,button,canvas,Java,Android,Xml,Button,Canvas,我试图在同一屏幕上单击每个按钮后添加一个圆圈。我还没有实现其他按钮代码,但它应该可以清除屏幕。这些圆应该处于随机位置/大小/颜色。我只在单击按钮时打印第一个圆圈。如果我再次单击它,我的应用程序将关闭。我还没有添加随机位置/大小,但我不知道如何使每个按钮单击在屏幕上显示另一个圆圈。我的代码如下 package com.example.randomcircles; import android.annotation.SuppressLint; import android.app.Activity

我试图在同一屏幕上单击每个按钮后添加一个圆圈。我还没有实现其他按钮代码,但它应该可以清除屏幕。这些圆应该处于随机位置/大小/颜色。我只在单击按钮时打印第一个圆圈。如果我再次单击它,我的应用程序将关闭。我还没有添加随机位置/大小,但我不知道如何使每个按钮单击在屏幕上显示另一个圆圈。我的代码如下

package com.example.randomcircles;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

public class DisplayRandomCircles extends Activity
{
DrawCircle c;
Canvas d;
FrameLayout f1;
@Override
public void onCreate(Bundle b)
{
    super.onCreate(b);
    setContentView(R.layout.activity_display_random_circles);
    Button btn1 = (Button) findViewById(R.id.btn1);
    Button btn2 = (Button) findViewById(R.id.btn2);
    c = new DrawCircle(getApplicationContext());
    d = new Canvas();
    f1 = (FrameLayout) findViewById(R.id.frame);

}
@SuppressLint("WrongCall")
public void doit(View v)
{
    switch (v.getId())
    {
        case (R.id.btn1):
            f1.addView(c);
            break;

        case (R.id.btn2):
            break;
    }
}
}
我的画圈代码

import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawCircle extends View
{
public DrawCircle(Context con)
{
    super(con);
}
@Override
protected void onDraw(Canvas c)
{
    int min = 0, max = 200;
    int num = min + (int)(Math.random()*max);
    super.onDraw(c);
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    p.setAntiAlias(true);
    p.setStyle(Paint.Style.STROKE);
    p.setStrokeWidth(100);
    p.setColor(Color.RED);
    p.setStyle(Paint.Style.FILL);
    c.drawCircle(num, num, num, p);
    invalidate();
}
}
我的布局xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<FrameLayout
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight=".75"
    android:orientation="vertical" >


</FrameLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight=".25"
    android:gravity="bottom|center"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|bottom"
        android:layout_weight=".50"
        android:onClick="doit"
        android:text="@string/Circle" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight=".50"
        android:layout_gravity="end|bottom"
        android:onClick="doit"
        android:text="@string/Clear" />
</LinearLayout>

</LinearLayout>

虽然有很多方法可以做到这一点,但我想展示两种方法:

最简单的方法:

在活动中使用DrawCircle元素的列表/数组,删除属性c和在onCreate和modify doit中初始化它的代码,如下所示:

case (R.id.btn1):
  DrawCircle c = new DrawCircle(getApplicationContext());
  circleList.add(c);
  f1.addView(c);
  break;
我最推荐的方式是:

维护两个数组/列表,或者只需在DrawCircle中使用一个hashmap即可: 包含圆心列表的圆心 另一个包含直径/半径列表。 在onDraw中,添加代码以迭代这些列表并相应地绘制圆圈。 修改按钮点击代码,通过调用DrawCircle中的addCircle等方法,或者通过公开这两个列表并直接添加到列表中,向这两个列表添加随机值
希望这能有所帮助。

使用random获取位置,并创建一个addCircle方法是否要绘制一个圆,还是要在按下该按钮时添加一个新的圆?我想在每次单击圆按钮时添加一个新的圆