Я написал операцию, которая показывает только один пользовательский вид.Частичная аннулирование Android частично отображает весь просмотр, пока аппаратное ускорение
Вид просто нарисуйте случайный цвет и аннулированию меньшую область, и сделать случайный цвет, и недействительным даже меньший регион, и так далее ...
Ожидаемый результат должен быть как this. Он отлично работает, используя программный рендеринг, и getClipBounds() возвращает область, в которую я только что перешел в недействительный. Но когда аппаратное ускорение включено, весь вид всегда перерисовывается новым цветом, а getClipBounds() возвращает область всего представления.
Я знаю, что есть такие должности, как this и this. Ответы сказали, что getClipBounds() возвращает область всего представления с аппаратным ускорением, но перерисовываются только те, которые пересекают грязную область.
Есть ли что-то неправильно или мое недоразумение?
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
// random color
int color = Color.rgb((int) (Math.random() * 255),
(int) (Math.random() * 255), (int) (Math.random() * 255));
canvas.drawColor(color);
canvas.getClipBounds(rect);
// smaller dirty region
invalidate(0, 0, rect.width() - 1, rect.height() - 1);
}
Это похоже на ошибку/недостаток в Android. Весь вид всегда перерисовывается, и производительность соответственно. То, что я делал в этих случаях, - это создать сетку представлений, которые входят в родительское представление, и родитель достаточно умен, чтобы неправильно отображать дочерние представления в сетке и отправлять им нужную часть растрового изображения для рисования. – jjxtra