我有一个应用程序,它需要我绘制到画布的路径。随着路径数量的增加,累积绘图动作需要更长的时间,所以我想我会通过使用绘图缓存来提高速度。
为此,我有一个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()
。
是这样吗?理想情况下,我希望 draw 方法对位图进行 blitting,然后在其上放置一条路径。如果它每次都从所有路径生成位图,我不妨不打扰(事实上,如果是这种情况,我可能会编写自己的位图生成代码,但这似乎很痛苦)。
如果不是发生了什么,是否还有其他可能导致代码变慢的原因?