Насколько одноразовыми являются объекты canvas?

Представьте, что у меня есть растровое изображение, и мне нужно его нарисовать. Для этого мне нужно обернуть его холстом.

Могу я его обернуть следующим образом:

Bitmap mBitmap;

public void drawDrawable(Drawable d){
    d.draw(new Canvas(mBitmap));
}

public void drawListOfPathsInRed(List<Path> list){
    Paint paint = new Paint();
    for(Path path : list)
        new Canvas(mBitmap).drawPath(path, paint);
}

Насколько это было бы плохо? Есть ли какие-либо заметные накладные расходы на создание большого количества холстов или какие-либо другие проблемы с ним?

0
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Canvas сам по себе не имеет большого значения, это довольно «легкий» объект, но когда мы говорим о рисовании, нам действительно нужен каждый бит производительности, который мы можем получить (подробнее здесь: Оптимизация обзора). С этой целью вы можете переместить создание Canvas за пределы вашего метода рисования и повторно использовать его с методом setBitmap:

Bitmap mBitmap;
Canvas mCanvas = Canvas();
Paint mPaint = new Paint(); // You should also reuse your Paint object

public void drawDrawable(Drawable d) {
    mCanvas.setBitmap(mBitmap);
    d.draw(mCanvas);
}

public void drawListOfPathsInRed(List<Path> list){
    canvas.setBitmap(mBitmap)
    for (Path path : list) {
        canvas.drawPath(path, paint);
    }
}

Чтобы пойти дальше, вы также можете извлечь вызов mCanvas.setBitmap из этапа рисования, сделав это сразу после установки переменной mBitmap.

Другие вопросы по теме