Android SurfaceView-某些路径在平移或缩放时延迟渲染
我已经用Android的SurfaceView和画布实现了某种矢量地图。 映射的每个元素都由在for循环中绘制的路径表示,for循环将每个路径绘制到画布上 类似这样的事情-Android SurfaceView-某些路径在平移或缩放时延迟渲染,android,performance,2d,android-canvas,surfaceview,Android,Performance,2d,Android Canvas,Surfaceview,我已经用Android的SurfaceView和画布实现了某种矢量地图。 映射的每个元素都由在for循环中绘制的路径表示,for循环将每个路径绘制到画布上 类似这样的事情- void doDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); if (mMapModel == null) return; for (MapElement e : mMapMo
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);
}
}
}
}
谢谢 终于解决了。这是一个线程问题 在每个pan上,我在一个大的路径列表上迭代,并更新每个路径的坐标 在我能够完成更新列表中每个项目的位置之前,渲染线程正在渲染我的路径
通过两个线程之间的一些同步,我能够解决这个问题。试试Thread.sleep(60);在onTouch方法中。嘿,Leco,谢谢你的建议!我在onTouch方法中添加了Thread.Sleep(60),它确实改善了一些小故障,但现在当我平移时,一些路径在每次缩放/平移时闪烁一秒钟。这也导致平移不太平滑。还有其他建议吗?你能发布你的pan代码吗?