Частичная аннулирование Android не работает должным образом с аппаратным ускорением

Я знаю, что это тот же вопрос, что и частичное недопустимое ускорение андроида-просмотра-с-аппаратным ускорением, но я подумал, что объясню свою проблему более подробно, и надеюсь, что кто-то найдет ответ на вопрос, как ее решить.

Я написал простое приложение TicTacToe, которое отлично работало на эмуляторе. Но не работал на устройстве, так как я обнаружил, что оно работало как положено на устройстве, когда я отключил аппаратное ускорение.

Все поля нарисованы с Canvas.drawBitmap()также "пустые" поля с пустым белым изображением. Линии нарисованы с Canvas.drawLine()Я использую частичное аннулирование с invalidate(Rect) потому что я хочу перерисовать только область, которая была выбрана, чтобы установить крест / круг с соответствующим изображением, используя снова Canvas.drawBitmap(), Но тогда вся область становится недействительной, то есть я вижу, что вся область / экран серого цвета (белые изображения и линии исчезли), и в выбранной области установлено только изображение для креста / круга.

Когда я распечатаю недействительное поле прямоугольник с Canvas.getClipBounds() в методе onDraw()с аппаратным ускорением это целая область (пример "0,0,320,407") и без аппаратного ускорения тот же прямоугольник, который я аннулировал invalidate(Rect) (например, "106,135,106,135").

На данный момент в качестве обходного пути я перерисовываю все поля с соответствующим изображением и строками. Как я могу предотвратить аннулирование всей области с аппаратным ускорением?

Если это имеет значение: я использую Android версии 4.1.2 на Samsung Galaxy Young Duos S6312.

С уважением Сандро

1 ответ

Решение

Я разместил свой ответ в указанной вами ссылке. Чтобы понять проблему, вы должны знать разницу между программным рендерингом и аппаратным рендерингом. Это действительно большая тема, которую я не буду здесь освещать. Я думаю, что лучший подход - это прочитать исходный код(я сделал то же самое несколько дней назад). Ключевой вопрос "что такое DisplayList и когда он используется ". Повторите мой ответ здесь, Canvas в onDraw просто используется для перестройки DisplayList. Это не значит, что все в вашем представлении будет перерисовано.

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