我已经使用 Android 的 SurfaceView 和 Canvas 实现了某种矢量图。地图的每个元素都由一个在 for 循环中绘制的路径表示,该循环将每个路径绘制到画布上。
像这样的东西-
void doDraw(Canvas canvas)
{
canvas.drawColor(Color.WHITE);
if (mMapModel == null)
return;
for (MapElement e : mMapModel.getMapElements()){
Path[] drawing = e.getDraw();
canvas.drawPath(drawing[0], mPathFramePaint); //draw the frame
mPathFillPaint.setColor(e.color);
canvas.drawPath(drawing[1], mPathFillPaint); //draw the fill
}
我遇到的问题是每次平移地图时都会出现非常奇怪的“漂移”行为。似乎某些元素是延迟渲染的,导致它们出现在以前的位置而不是新的实际位置。
您可以在此视频中看到现象 -
我试图弄清楚是否有什么我做的不对。在我看来,我不觉得这是一件很繁重的事情,会导致项目渲染得太晚。
这是后台线程正在运行的代码 -
public class MapViewThread extends Thread
{
boolean mRun;
Canvas mcanvas;
SurfaceHolder surfaceHolder;
Context context;
MapView mMapView;
public MapViewThread(SurfaceHolder sholder, Context ctx, MapView mapView)
{
surfaceHolder = sholder;
context = ctx;
mRun = false;
mMapView = mapView;
}
void setRunning(boolean bRun)
{
mRun = bRun;
}
@Override
public void run()
{
super.run();
while(mRun)
{
mcanvas = surfaceHolder.lockCanvas();
if(mcanvas != null)
{
mMapView.doDraw(mcanvas);
surfaceHolder.unlockCanvasAndPost(mcanvas);
}
}
}
}
谢谢!