2012-01-27 46 views
1

我正在創建一個android應用程序,該應用程序必須繪製我已經用laserscans探索的環境的地圖。 我有我的所有數據,如電子文本文件:動態繪製圖像的最佳方式


index x y 
path 0 0 0 
path 1 1 0 
path 2 2 0 

...etc 

obstacle 0 10 10 
obstacle 1 10 22 

..etc 

,所以我有XY我去過的地方,座標和我見過的障礙XY。 我有一個thread從文本文件中讀取數據並將其存儲在list中。

另一個thread讀取list,並繪製在list中放入的所有點,直到讀數爲thread

我的問題是,我不想每次讀取thread已經將新數據寫入數據list時重新讀取所有內容。有一種方法可以繪製類似位圖的圖形並動態修改它?我的意思是說,每次我讀取一些新數據時,我都會「打開」位圖,並添加新的點,「關閉」該位圖並顯示在屏幕上?

什麼我現在做的是閱讀我的onDraw()功能均榜上有名,並通過點繪製了點,但我有點,這是一個有益的工作,因爲每一個時間點是在老位置,我只有一些新的點...

回答

0

您可以在您的視圖中創建位圖和畫布,並根據需要繼續繪製該位圖。爲了防止再次繪製點,繪製點的線程應該在繪製時從列表中刪除點,或者跟蹤最後一個點的索引。

下面是一個包含基礎的例子:

public class myView extends View { 

    Bitmap mBitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); 
    Canvas mCanvas = new Canvas(mBitmap); 
    Paint mPaint = new Paint(); 

    public void updateBitmap(List<Point> points) { 
     while (!points.isEmpty()) { 
      int x = points.get(0).x; 
      int y = points.get(0).y; 
      mCanvas.drawPoint(x, y, mPaint); 
      points.remove(0); 
     } 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(mBitmap, 0, 0, null); 
    } 
} 

繪製點要求updateBitmap,傳遞點來繪製當前列表中的線程。這些點然後從列表中刪除,以便稍後不再繪製它們。