2013-08-06 44 views
0

我正在玩帆布以获得它的感觉,所以我创建了一个点数组,然后我尝试绘制到画布。但是,只有最后一个点出现在画布上... 我不确定如何在画布上显示数组中的所有点,但任何帮助将不胜感激!Android:在循环中绘制到画布

List<Point> pointList = new ArrayList<Point>(); 
Point point1 = new Point(); 
point1.set(0,0); 

Point point2 = new Point(); 
point2.set(0,0); 

Paint red = new Paint(); 
red.setColor(Color.RED); 

for(int i = 0; i <= 30; i++) 
{ 
point1.set(i, i); 
pointList.add(i, point1); 

} 

for(int i = 0; i <= 30; i++) 
{ 
point2 = pointList.get(i);   
canvas.drawPoint(point2.x, point2.y, red); 

} 

回答

1

我相信你的问题是在您所设定的循环:

for(int i = 0; i <= 30; i++) 
{ 
    point1.set(i, i); 
    pointList.add(i, point1); 
} 

在java中,包含对象的所有变量实际上都是指针。因此point1总是指向同一个对象,因为你永远不会改变它指向的内容。在每次循环迭代中,您将指向的对象更改并重新插入到列表中。因此,pointList包含31个相同点的实例,全部在(30,30)。

相反,你应该建立在每个迭代一个新的点,因此您的代码看起来像:

for(int i = 0; i <= 30; i++) 
{ 
    Point p = new Point(); 
    p.set(i, i); 
    pointList.add(i, p); 
} 

那么这将创造在循环的每个迭代一个新的起点。你也不再需要一个point1变量。

此外,你有你的观点非常接近。即使有这些变化,您也可能无法看到差异。你可能想把你的观点分开一些。

+0

完美地工作,非常感谢你MJD! – user2655110

0

我相信这是因为ArrayList add()添加了对象的引用,而不是对象本身的副本。尝试:

List<Point> pointList = new ArrayList<Point>(); 
Point point1 = new Point(); 
point1.set(0,0); 

Point point2 = new Point(); 
point2.set(0,0); 

Paint red = new Paint(); 
red.setColor(Color.RED); 

for(int i = 0; i <= 30; i++) 
{ 
    Point point3 = new Point(); 
    point3.set(i, i); 
    pointList.add(i, point3); 

} 

for(int i = 0; i <= 30; i++) 
{ 
    point2 = pointList.get(i);   
    canvas.drawPoint(point2.x, point2.y, red); 

} 
+0

完美地工作,谢谢你frogmanx! – user2655110