5

Я работаю над пользовательским графическим представлением Android, которое использует Canvas # drawLines и объект paint, в котором включен сглаживание. Мое мнение включает аппаратное ускорение. Иногда, когда я зажимаю увеличение/уменьшение масштаба, некоторые из строк на моем графике будут отображаться несвязанными, и они вроде бы превращаются в градиент. Если я перейду на программный уровень или отключу сглаживание, проблема исчезнет. Это ошибка с drawLines или кто-то имеет представление о том, что может происходить?Android-drawline с аппаратным ускорением и сглаживанием вызывает артефакты

Первое изображение демонстрирует проблему, второе изображение слегка перемещено и демонстрирует, как график выглядит большую часть времени, с полностью соединенными линиями.

(изображение демонстрирует выпуск) enter image description here

(изображение, показывающее, как график должен выглядеть - еще пара незначительных пробелов) enter image description here

ответ

1

Я думаю, что это сообщение от Romain Guy ответы на некоторые из вашего вопроса: http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html

По сути, сглаживание не поддерживается drawLines при включении аппаратного ускорения. Также помните, что аппаратное ускорение не всегда будет «лучше» для вашего приложения. Если то, что вы рисуете, можно ускорить, ваше приложение выиграет от этого, но для определенных операций это может быть хуже.

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

+0

Спасибо. Я столкнулся с подобной проблемой. Я попытался решить, используя 'LAYER_TYPE_SOFTWARE'. Тем не менее, вещь появляется медленнее, как на диаграмме, есть движущиеся перекрестия, основанные на моем событии касания. Ты знаешь почему? Я предполагаю, что время для переноса экранного растрового изображения программного обеспечения на GPU при использовании 'LAYER_TYPE_SOFTWARE'. –

+0

После того, как отключить сглаживание, хотя проблема с непересекающимися линиями больше не отображается, нарисованная линия не является гладкой и выглядит уродливой. –

1

Попробуйте обновить после жесты изменения размера.

Посмотрите на мое старое приложение Accelerometer Toy. (Да, это действительно нужно обновить ...) Если вы не видите проблему с этим приложением, то я, вероятно, смогу помочь.