Я написал действие, которое показывает только одно пользовательское представление.
Представление простое: нарисовать случайный цвет и сделать недействительной меньшую область, нарисовать случайный цвет и сделать недействительной еще меньшую область и так далее...
Ожидаемый результат должен быть похож на этот. Он хорошо работает при использовании программного рендеринга, а getClipBounds() возвращает область, которую я только что передал в недействительную. Но когда аппаратное ускорение включено, весь вид всегда перерисовывается новым цветом, а getClipBounds() возвращает всю область вида.
Я знаю, что есть такие сообщения, как это и это. В ответах говорилось, что 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);
}