Сохранение холста в onDraw (); - PullRequest
       34

Сохранение холста в onDraw ();

1 голос
/ 16 сентября 2011

Я пытаюсь сохранить объект Canvas в методе onDraw (). Это потому, что я использую цикл foreach в методе onDraw, что приводит к: 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);
}

при отладке я вижу, что все выглядит нормально, но выходит пустым. что было бы лучшим способом заставить это работать?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Может быть, это из-за этого:

if (hasrun = false)

Полагаю, вы собираетесь сделать это вместо этого:

if (hasrun == false)
0 голосов
/ 16 сентября 2011

Вы можете попытаться сохранить растровое изображение: (я думаю, что лучше вызывать 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());
}

...