如何从另一个名为MainView的类中获取我填充DrawView类的矩形数组r []的元素?
我已经尝试了几种解决方案,但要么我只得到一个填充了DrawView类数组的最后一个元素的数组或nullpointer异常。
E.g。下面的代码,当我尝试从DrawView将数组导出到MainView(循环内部,r [i] = drawView.r [i])时,它给出一个完全填充DrawView矩形数组的最后一个元素的数组。但我想导出到MainView完全相同的数组,我填写了DrawView。
任何想法我应该改变什么?
public class DrawView extends View {
public Rect [] r = new Rect[81];
Rect r2= new Rect(left, top, right, bottom);
int m=0;
@Override
public void onDraw(Canvas canvas) {
//...........some calculations of variables leftPosFirst etc.......//
int i=0;
while(i<9){
int j=0;
while(j<9){
try{
if(m<81){
r2.left=leftPosFirst+1;
r2.top=(heightRect+heightRect*j)+1;
r2.right=rightPosFirst-1;
r2.bottom=(heightRect+heightRect*(j+1))-1;
r[m]=r2;
m++;
}
} catch (Exception ex){}
j++;
}
i++;
}
}
}
MainView.java类:
public class MainActivity extends Activity implements OnTouchListener{
DrawView drawView;
int m=0;
Rect[] r = new Rect[81];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
setContentView(drawView);
drawView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
int i;
for (i=0; i<81; i++) {
try{
r[i] = drawView.r[i];
System.out.println(r[i]);
} catch(Exception e){}
}
return true;
}
}
return false;
}
});
}
}
答案 0 :(得分:0)
有一件事你应该很清楚:在java中引用了对象。也就是说,如果我写下以下片段:
Rect r[] = new Rect[2];
Rect r2 = new Rect(0, 0, 1, 1);
r[0] = r2;
r2.right = 2;
r[1] = r2;
r[0]
和r[1]
都指向同一个对象。因此,如果你这样做
System.out.println(r[0].right);
您会看到打印2
,而不是1
。
您需要做的是每次都创建一个新对象,而不是修改同一个对象。
使用
if(m<81){
r2 = new Rect(leftPosFirst+1,
heightRect+heightRect*j)+1,
rightPosFirst-1,
heightRect+heightRect*(j+1))-1);
r[m]=r2;
m++;
}