Android绘图缓存在后台执行什么操作?

时间:2012-06-18 15:54:11

标签: android caching path draw

我有一个应用程序需要我绘制画布的路径。随着路径数量的增加,累积绘图操作需要更长时间,因此我认为我可以通过使用绘图缓存来提高速度。

要做到这一点,我有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();
    }
}

mPathsmPaintsPathPaint个对象的列表,我设置了一个方法来计算出有多少是新的,所以它只重绘最后一个。我最初打电话给setDrawingCacheEnabled(true)而不是buildDrawingCache()destroyDrawingCache(),但这不起作用(这可能很重要)。

无论如何,这段代码有效 - 它会产生一个我可以写入画布的位图,然后我只绘制最后一条路径,一切都很好除了,当我绘制越来越多的路径时,它仍然慢下来,好像它仍然在buildDrawingCache()期间重新绘制所有路径。

这是怎么回事?理想情况下,我希望绘制方法是blitting一个位图,然后在它上面放一条路径。如果它正在从所有路径生成位图,那么每次,我都不会打扰(事实上,如果是这种情况,我可能会编写自己的位图生成代码,但这看起来很痛苦。)

如果不是正在发生什么,是否有其他可能导致代码速度变慢的问题?

0 个答案:

没有答案