Почему частичная недействительность охватывает весь вид?

Я пытаюсь частично аннулировать Android View. Я использую View.invalidate( l, t, b, r), и он, по-видимому, делает недействительными значения по вертикали (сверху и снизу) правильно, однако, независимо от того, какие значения слева и справа я использую, он делает недействительными все в представлении.

Например, мой взгляд серый. Я хочу лишить законной силы зеленую область, однако, она лишает законной силы зеленая и красная область. Он всегда охватывает все горизонтальное направление целиком через представление. Я попытался поместить небольшие значения, такие как View.invalidate( 0, 0, 50, 50), и это по-прежнему вызывает такое поведение.

Ссылка на изображение (недостаточно репов для публикации изображений)

Почему это происходит?

1 ответ

Решение

Поведение изменилось с аппаратным ускорением, по умолчанию после Сота. Теперь, когда ты invalidate() представление, предоставляющее грязную область, граница клипа не установлена ​​(canvas.getClipBounds()). Тем не менее, только объекты, пересекающие грязную область, будут перерисованы.

См. Для справки этот ответ Ромена Гая, автора конвейера рендеринга.

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