Почему частичная недействительность охватывает весь вид?
Я пытаюсь частично аннулировать Android View. Я использую View.invalidate( l, t, b, r), и он, по-видимому, делает недействительными значения по вертикали (сверху и снизу) правильно, однако, независимо от того, какие значения слева и справа я использую, он делает недействительными все в представлении.
Например, мой взгляд серый. Я хочу лишить законной силы зеленую область, однако, она лишает законной силы зеленая и красная область. Он всегда охватывает все горизонтальное направление целиком через представление. Я попытался поместить небольшие значения, такие как View.invalidate( 0, 0, 50, 50), и это по-прежнему вызывает такое поведение.
Ссылка на изображение (недостаточно репов для публикации изображений)
Почему это происходит?
1 ответ
Поведение изменилось с аппаратным ускорением, по умолчанию после Сота. Теперь, когда ты invalidate()
представление, предоставляющее грязную область, граница клипа не установлена (canvas.getClipBounds()
). Тем не менее, только объекты, пересекающие грязную область, будут перерисованы.
См. Для справки этот ответ Ромена Гая, автора конвейера рендеринга.