2012-01-27 66 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,传递点来绘制当前列表中的线程。这些点然后从列表中删除,以便稍后不再绘制它们。