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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 - Fatal编程技术网

Java 如何使用在另一个类中声明的数组

Java 如何使用在另一个类中声明的数组,java,android,Java,Android,我是Java新手。这是我的密码。我在onCreate()中创建了一个数组,如何在onDraw()中使用它?谢谢 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int Circle_list[] = { Color.BLACK, 20, 20, 50 }; } private class

我是Java新手。这是我的密码。我在
onCreate()
中创建了一个数组,如何在
onDraw()中使用它?谢谢

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    int Circle_list[] = { Color.BLACK, 20, 20, 50 };
}

private class MyViewCircle extends View {

    public MyViewCircle(Context context) {
        super(context);

        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        canvas.drawCircle(Circle_list[1], Circle_list[2], Circle_list[3], paint);
    }
}

目前,数组是一个局部变量,只有在“onCreate”方法中才知道。您必须通过将其定义为实例变量来更改其范围,以便onDraw能够访问它

    private int[] Circle_list = null ;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);         
        Circle_list = new int[] { Color.BLACK, 20, 20, 50 };     
    }  
    private class MyViewCircle extends View {          
        public MyViewCircle(Context context) {
            super(context);              
        // TODO Auto-generated constructor stub         
        }
        @Override
        protected void onDraw(Canvas canvas) {
           // TODO Auto-generated method stub
           super.onDraw(canvas);
           Paint paint = new Paint();
           paint.setAntiAlias(true);
           paint.setColor(Color.WHITE);
           canvas.drawCircle(Circle_list[1], Circle_list[2], Circle_list[3],
                paint);         
        }     
    }

在MyCircleView类中,创建一个方法以在圆数组中传递

public class MyViewCircle extends View {
    int[] circle_list;

    public MyViewCircle(Context context) {
        super(context);

        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        canvas.drawCircle(Circle_list[1], Circle_list[2], Circle_list[3],
                paint);
    }

    public void setCircleList(int[] circles) {
        circle_list = circles;
    }
}
然后在活动的onCreate方法中,执行以下操作:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    int Circle_list[] = { Color.BLACK, 20, 20, 50 };
    MyViewCircle view = (MyViewCircle) findViewById(R.id.circle_view);
    view.setCircleList(Circle_list);
}

(对于
R.id.circle\u视图
,替换xml中定义的适合您的circle视图的任何id。)

如果将circle\u列表作为外部类的成员变量,则可以从内部类访问该变量

您的代码当前在一个方法内声明了Circle_list,因此在该方法外无法访问它。下面的代码应该向您展示如何做到这一点。请注意,您的数组语法不太正确,它的形式应该是“type[]var”,而不是“type var[]”


从XML引用嵌套类是一件痛苦的事情。此外,它可以防止在构建时捕获某些错误,并且很难(也许不可能)使用自定义属性(我承认,OP不太可能使用这些属性)。另外,我不认为嵌套类可以是私有的。顺便说一句,如果您使用的颜色是指AWT类型的颜色,那么您不能将Color.BLACK(类型颜色)分配给int.java.AWT.Color不是Android api的一部分
android.graphics.Color.BLACK
是一个
int
值。为了澄清我之前关于嵌套类是私有类的评论,Java允许这样做,但我认为该类在android的XML布局文件中不可用。@Ted Hopp-谢谢,很高兴知道。“我没有注意到Android标记,所以它偏离了一般原则。@Ted Hopp根据java文档,嵌套类可以有任何访问说明符:我没有一般地接受嵌套类是私有的。我知道那很好。我只是不认为可以在Android.Offtopic中的XML布局文件中使用它们。小改进:在构造函数中创建并初始化
paint
对象,而不是在
onDraw()
中。这对性能更好,因为
onDraw()
被多次调用,您不需要每次都创建
paint
对象。
class MyClass extends Something {

    //Declare variables here
    private int[] Circle_list; //Note the int[], not int var[] as in C/C++

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        int[] Clist = { Color.BLACK, 20, 20, 50 };
        Circle_list = Clist;
    }

    private class MyViewCircle extends View {

        public MyViewCircle(Context context) {
            super(context);

        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.WHITE);
            canvas.drawCircle(Circle_list[1], Circle_list[2], Circle_list[3],
                paint);
        }
    }