我有一个应用程序需要我绘制画布的路径。随着路径数量的增加,累积绘图操作需要更长时间,因此我认为我可以通过使用绘图缓存来提高速度。
要做到这一点,我有onDraw
方法看起来有点像这样:
@Override
protected void onDraw(Canvas canvas) {
Path path;
Paint paint;
synchronized(mPaths) {
buildDrawingCache();
Bitmap bmp = getDrawingCache();
if(bmp!=null) canvas.drawBitmap(bmp,
new Rect(0, 0, bmp.getWidth(), bmp.getHeight()),
new Rect(getLeft(), getTop(), getRight(), getBottom()),
null);
for(int i=mLastCount; i<mPaths.size(); ++i) {
path = mPaths.get(i);
paint = mPaints.get(i);
canvas.drawPath(path, paint);
}
mLastCount = 0;
mDrawn = true;
destroyDrawingCache();
}
}
mPaths
和mPaints
是Path
和Paint
个对象的列表,我设置了一个方法来计算出有多少是新的,所以它只重绘最后一个。我最初打电话给setDrawingCacheEnabled(true)
而不是buildDrawingCache()
和destroyDrawingCache()
,但这不起作用(这可能很重要)。
无论如何,这段代码有效 - 它会产生一个我可以写入画布的位图,然后我只绘制最后一条路径,一切都很好除了,当我绘制越来越多的路径时,它仍然慢下来,好像它仍然在buildDrawingCache()
期间重新绘制所有路径。
这是怎么回事?理想情况下,我希望绘制方法是blitting一个位图,然后在它上面放一条路径。如果它正在从所有路径生成位图,那么每次,我都不会打扰(事实上,如果是这种情况,我可能会编写自己的位图生成代码,但这看起来很痛苦。)
如果不是正在发生什么,是否有其他可能导致代码速度变慢的问题?