Производительность ImageView - должен ли он перерисовываться, когда что-то перед ним меняется? - PullRequest
0 голосов
/ 01 апреля 2011

У меня есть действие, которое использует FrameLayout для рисования двух слоев на экране. Первый, сзади, это ImageView, отображающий растровое изображение - масштабируется до полного размера экрана с помощью match_parent. Второй, впереди, небольшой рисованный объект, реализованный с помощью animation-list - по сути, это набор кадров PNG, которые составляют анимированный значок (примерно 10 кадров с android: длительность = 100 мс каждый). Изображения PNG в анимации используют прозрачность, так что вы можете видеть фоновый ImageView позади него, и все это мало по сравнению с ImageView - это действительно значок в верхней части изображения.

Я заметил, что это простое приложение, похоже, потребляет немного ресурсов процессора. Чтобы помочь отследить его, я расширил ImageView, чтобы переопределить onDraw для фонового изображения, и обнаружил, что процедура onDraw, кажется, вызывается каждый раз, когда анимация переднего плана обновляется. Это ожидаемое поведение? Я ожидал бы, что содержимое ImageView должно где-то кэшироваться, поэтому ему не нужно перерисовывать свое растровое изображение, если ничего не меняется.

Есть ли лучший способ получить эту функциональность?

1 Ответ

3 голосов
/ 01 апреля 2011

Ожидается то, что вы видите.Чтобы перерисовать PNG, которые вы анимируете, необходимо очистить кадровый буфер, что означает, что фоновое изображение должно быть перерисовано.Кэширование никак не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...