Java 如何使用在另一个类中声明的数组
我是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
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);
}
}