1

我有一个应用程序,它需要我绘制到画布的路径。随着路径数量的增加,累积绘图动作需要更长的时间,所以我想我会通过使用绘图缓存来提高速度。

为此,我有一个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并且mPaintsPathPaint对象的列表,我设置了一个方法来计算有多少是新的,所以它只重绘最后一个。我最初打电话setDrawingCacheEnabled(true)而不是,buildDrawingCache()但这destroyDrawingCache()没有用(这可能很重要)。

不管怎样,这段代码有效——它产生了一个位图,我可以将它写入画布,然后我只绘制最后一条路径,一切都很好,只是随着我绘制越来越多的路径,它仍然变慢,就好像它还在重绘一样期间的所有路径buildDrawingCache()

是这样吗?理想情况下,我希望 draw 方法对位图进行 blitting,然后在其上放置一条路径。如果它每次都从所有路径生成位图,我不妨不打扰(事实上,如果是这种情况,我可能会编写自己的位图生成代码,但这似乎很痛苦)。

如果不是发生了什么,是否还有其他可能导致代码变慢的原因?

4

0 回答 0