我正在创建一个Android应用程序,必须绘制一个我用激光扫描探索过的环境地图。 我有一个包含所有数据的文本文件,如:
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()
函数中的所有列表并逐点绘制,但我有 170 000 点,这是一项有用的工作,因为每次都是积分处于旧位置,我只有一些新的观点...
答案 0 :(得分: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
,并将当前要绘制的点列表传递给它。然后从列表中删除这些点,以便以后不再绘制它们。