2013-08-06 127 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