Я создаю закадровое растровое изображение + холст, рисую в нем кучу меньших растровых изображений, а затем рисую их в представлении. Метод isHardwareAccelerated() возвращает false для моего холста:
mBitmap = new Bitmap(500, 500, Bitmap.Config.RGB_565);
mCanvas = new Canvas(mBitmap);
mCanvas.isHardwareAccelerated(); // false
Я вижу, что холст, предоставленный мне в методе onDraw() моего представления, хотя и аппаратно ускорен:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.isHardwareAccelerated(); // true
// My current approach, but maybe better to draw directly
// to the view's canvas if it's hardware accelerated?
canvas.drawBitmap(mBitmap, ...);
}
Мне интересно, можем ли мы включить это для закадрового холста?
Мне также интересно, должен ли я просто рисовать непосредственно на холсте с аппаратным ускорением вместо того, чтобы возиться с внеэкранным, если он не будет ускорен. Я думал, что будет быстрее сначала нарисовать все за кадром.
Мне нужно реорганизовать свой код, чтобы проверить это, просто интересно, не упустил ли я что-то очевидное для закадрового кода.
Спасибо
------- Обновлять -----------------------------------
Я реорганизовал свой код рисования, чтобы просто рисовать непосредственно на холсте представления в onDraw() вместо использования холста за пределами экрана. Производительность намного лучше.
Тем не менее, было бы неплохо включить аппаратное ускорение для закадрового холста, для этого определенно есть множество вариантов использования.