Android 动态绘制图像的最佳方法

Android 动态绘制图像的最佳方法,android,image,dynamic,draw,surfaceview,Android,Image,Dynamic,Draw,Surfaceview,我正在创建一个android应用程序,它必须绘制一张我用激光扫描探索过的环境地图。 我有一个包含所有数据的e文本文件,如: 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坐标。 我有一个线程从文本文件中读取数据,并将数据存储在列表中 另一个线程读取该列表,并通过读取线程绘制在该列表中的所有点,直

我正在创建一个android应用程序,它必须绘制一张我用激光扫描探索过的环境地图。 我有一个包含所有数据的e文本文件,如:


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坐标。 我有一个线程从文本文件中读取数据,并将数据存储在列表中

另一个线程读取该列表,并通过读取线程绘制在该列表中的所有点,直到该时刻为止

我的问题是,我不想每次读取线程将新数据放入数据列表时都重新读取所有内容。是否有一种方法可以绘制位图之类的内容并动态修改?我的意思是,每次我读到一些新的数据,我打开位图,我添加新的点,关闭位图并显示在屏幕上


我现在做的是读取onDraw函数中的所有列表并逐点绘制,但我有17万个点,这是一项有用的工作,因为每次点位于旧位置时,我只有一些新点…

您可以在视图中创建位图和画布,并根据需要继续绘制到该位图中。为了防止再次绘制点,绘制点的线程应该在绘制点时从列表中删除点,或者跟踪最后一个点的索引

下面是一个包含基本知识的示例:

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,将当前要绘制的点列表传递给它。这些点将从列表中删除,以便以后不再绘制