3

我正在尝试将 Canvas 对象保存在 onDraw() 方法中。这是因为我在 onDraw 方法中使用了 foreach 循环,导致:canvas.DrawText (textitem, x,y, textpaint);
(我必须这样做,因为我在蒙版区域周围绘制文本)

我现在正在尝试的是:

@Override
public void onDraw(Canvas canvas)
{
if (hasrun = false)
        {
            for(CustomTextViewDrawItem item : drawItemList)
            {
                canvas.drawText(item.Text, item.X, item.Y, textPaint);
            }

            if (eLabel.backgroundGradient != null)
            {
                canvas.drawPath(path, fillPaint);
            }
            canvas.save();
            savedCanvas = canvas ;
        }
        else 
        {
            canvas = savedCanvas; 
        }

        hasrun = true; 
        super.onDraw(canvas);
}

调试时我看到它看起来不错,但出来是空的。什么是让这个工作的最佳方法?

4

2 回答 2

2

也许是因为这个:

if (hasrun = false)

我猜你打算这样做:

if (hasrun == false)
于 2011-09-16T10:05:53.820 回答
1

您可以尝试保存位图:(我认为最好在方法的开头调用 super.onDraw(canvas); ,因为您的视图相关绘图将在顶部)


@Override
public void onDraw(Canvas canvas)
{
        super.onDraw(canvas);
        if (savedBitmap==null){
            savedBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Config.ARGB_8888);
            Canvas canvasToSave = new Canvas(savedBitmap)
            for(CustomTextViewDrawItem item : drawItemList){
                canvasToSave.drawText(item.Text, item.X, item.Y, textPaint);
            }

            if (eLabel.backgroundGradient != null){
                canvasToSave.drawPath(path, fillPaint);
            }
        }
        canvas.drawBitmap(savedBitmap, 0, 0, new Paint());
}

于 2011-09-16T09:02:33.120 回答