Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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
Android 如何制作Rect的数组或arraylist_Android_Rect - Fatal编程技术网

Android 如何制作Rect的数组或arraylist

Android 如何制作Rect的数组或arraylist,android,rect,Android,Rect,我想弄明白这件事,快发疯了。我正在尝试制作一个数组或矩形的arraylist(矩形),我可以更新坐标并在屏幕上绘制(使它们移动) 现在,我有一个单独的类,名为Fire,在这个类中,我在每次迭代中使用自己的onDraw()方法中的新坐标创建一个新矩形。在视图的onDraw()方法的第一次迭代中,我向arraylist添加了一个新的Fire 在消防等级中,我有: public void onDraw(Canvas canvas){ moveF(); Rect r = new Rect

我想弄明白这件事,快发疯了。我正在尝试制作一个数组或矩形的arraylist(矩形),我可以更新坐标并在屏幕上绘制(使它们移动)

现在,我有一个单独的类,名为Fire,在这个类中,我在每次迭代中使用自己的onDraw()方法中的新坐标创建一个新矩形。在视图的onDraw()方法的第一次迭代中,我向arraylist添加了一个新的Fire

在消防等级中,我有:

public void onDraw(Canvas canvas){
    moveF();
    Rect r = new Rect(_l,_t,_r,_b);
    canvas.drawRect(r, paint);
}
protected void onDraw(Canvas canvas) {
    int i = 0;
    canvas.drawColor(Color.WHITE);
    if(i==0){
        fires.add(new Fire(20,100,40,120));
        i++;
    }
    for(Fire fire : fires){
        fire.onDraw(canvas);
    }
}
在View类中,我有:

public void onDraw(Canvas canvas){
    moveF();
    Rect r = new Rect(_l,_t,_r,_b);
    canvas.drawRect(r, paint);
}
protected void onDraw(Canvas canvas) {
    int i = 0;
    canvas.drawColor(Color.WHITE);
    if(i==0){
        fires.add(new Fire(20,100,40,120));
        i++;
    }
    for(Fire fire : fires){
        fire.onDraw(canvas);
    }
}
我去掉了代码中毫无意义的部分,但这是重要的东西。矩形打印,但是它也打印所有以前的位置,我不明白为什么。我一直在努力解决这个问题,如果你们能提供任何帮助,我将不胜感激。我能够用java轻松地实现这一点,但android给我带来了问题


提前感谢

每次调用View.onDraw时,您都会创建一个新火并将其添加到列表中。 然后迭代所有火并绘制它们。 所以你会有越来越多的火。 所有的火是以相同的方式移动还是有一些随机的成分? 这可能是因为您看不到一次火灾之前的位置,但有许多火灾在同一条路径上移动


您想让一个火四处移动还是让越来越多的火独立地四处移动?

从代码中,您将向列表中添加新的矩形,然后绘制每个矩形。但是从描述来看,您似乎只想绘制一个带有更新坐标的矩形

不要每次都创建一个新的矩形,而是重用一个矩形并使用
set(…)
更新其坐标

第二个问题是设置
i=0
,然后立即检查
i==0
,这将始终是正确的。请尝试以下方法:

static final Rect rect = new Rect();

// your code here

protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.WHITE);

    moveF();
    rect.set(_l,_t,_r,_b);
    canvas.drawRect(rect, paint);

}

理想情况下,我会让多个火独立移动。好的,那么你的代码生成火就可以了。画布会在某个时刻被清除吗?也许你看到的是旧的位置,因为背景永远不会被擦除,新的火焰只是画在旧的火焰之上?不确定你是否需要擦除,或者框架是否为你这样做。也许这有帮助:(还有关于invalidate和postInvalidate的注释)我把它改为rect.set(_l,_t,_r,_b)使它工作起来;相反,也移动i=0;方法之外。我会查出来的链接,虽然我相信这是很好的知道,谢谢你的帮助!我将检查这一点,并将结果发回,我认为if语句会使它只创建一个fire,但是每次创建一个新的Rect是没有意义的。谢谢你的意见。@Brian我在更新我的答案后看到了你的评论:)太棒了!我把它改为rect.set(_l,_t,_r,_b);然后将i=0移到方法之外,它工作得非常好!我讨厌求助,但你们真是太棒了,我犯了太多愚蠢的错误,哈哈。谢谢@Brian我们都需要帮助。我很高兴它有用。请考虑将答案标记为正确(然后在数字旁边,在左边)。