【问题标题】:Unable to add to class elements ArrayList inside DrawView无法添加到 DrawView 内的类元素 ArrayList
【发布时间】:2015-09-06 12:04:56
【问题描述】:

我正在尝试将类元素添加到绘图视图一侧的数组列表中。不幸的是,添加功能没有添加所需的元素.. 这是我的 DrawView 类。

请查看绘图游戏内部和大小更改功能。

问题似乎是数组列表的大小保持为 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);
    ...............................

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

请帮忙....谢谢。

【问题讨论】:

  • 如果你已经知道 arraylist 的大小为 2,为什么不将它初始化为 new ArrayList&lt;bubble1&gt;(2);
  • 我试过了,但效果不错。

标签: android arraylist add indexoutofboundsexception


【解决方案1】:

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

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

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

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

这解决了问题...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多