无法在DrawView中添加类元素ArrayList

时间:2015-09-06 12:04:56

标签: android arraylist add indexoutofboundsexception

我正在尝试将一个类元素添加到绘图视图一侧的数组列表中。遗憾的是,add函数没有添加必需的元素.. 这是我的DrawView类。

请查看drawgame内部和尺寸更改功能。

问题似乎是数组列表的大小保持为0而不是2.因此函数显示IndexOutOfBoundExeption ..

public class DrawView extends View {
int i=0;
float flag=0;
float bubrank=2;   
ArrayList<bubble1> bub1 ;
Context mContext;
private int width, hieght;


public DrawView(Context context,AttributeSet attrs){
    super(context,attrs);
    mContext = context;       
    bub1 = new ArrayList<bubble1>();       

}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    drawgame(canvas);
    try {
        Thread.sleep(15);
    } catch (InterruptedException e) {
    }
    invalidate();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    width = w;
    hieght = h;
    for (i = 0; i < bubrank; i++) {
        bub1.get(i).setbound(0, 0, width, hieght);            
    }


}

public void drawgame(Canvas canvas) {
    canvas.drawColor(Color.DKGRAY);
    for (i = 0; i <bubrank; i++)
        bub1.add(new bubble1(Color.BLUE, mContext));
    bub1.get(0).draw(canvas);
    ...............................

............................................... .........

请帮助....谢谢你。

1 个答案:

答案 0 :(得分:0)

错误不在drawgame()中,而是在循环中的onSizeChanged()中。

for (i = 0; i < bubrank; i++) {
bub1.get(i).setbound(0, 0, width, hieght);            
}

问题是onSizeChanged是一个&#34;回调&#34;方法 - 在您调用drawgame()之前,系统会在您不知情的情况下调用它 - ArrayList尚未填充。你需要做教授在射击游戏中所做的事情。

for (i = 0; i < bub1.size(); i++) {
bub1.get(i).setbound(0, 0, width, hieght);            
}

这解决了问题...