Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Почему при включении аппаратного ускорения отображение svg файла становится размытым?

#android #svg #path #assets


Почему происходит размытие элемента path в то время как rectangle и circle без размытия?
Я нашёл решение в виде отключения аппаратного ускорения (заменой на программное), но
мне хотелось бы оставить аппаратное ускорение для данного View и избавиться от размытия.

android:layerType="hardware" // аппаратное
android:layerType="software" // программное 


В gradle важная строчка указана

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}


Вот код загрузки изображения SVG формата из Assets. 

// https://github.com/Pixplicity/sharp          
Sharp sharp = Sharp.loadAsset(getAssets(), "drawing.svg"); 
Drawable drawable = sharp.getDrawable();
view = findViewById(R.id.photo_view); //ImageView
view.setImageDrawable(drawable);


Прошу не предлагать импорт Vector asset в Drawable ресурсы. Мне это не подходит.
В моём приложении планируется сотня небольших векторных изображений, которые я планирую
размещать в папке assets.

Проблема одинаково выглядит как на эмуляторе так и на реальных устройствах.

android:layerType="hardware" // аппаратное




android:layerType="software" // программное  



    


Ответы

Ответ 1



Несколько дней мучился меняя библиотеки для работы с SVG. Но как это обычно бывает, ответ на собственный вопрос находится сразу же после того как задашь вопрос на стэковерфлоу ) Для назначения изображения нужно было использовать метод into(): view = findViewById(R.id.photo_view); //ImageView Sharp.loadAsset(getAssets(), "drawing.svg") .into(view); Всем спасибо! Надеюсь этот вопрос поможет кому нибудь в будущем ) Размытие исчезло во всех режимах android:layerType. P.S. Всё равно загадка остаётся неразгаданной, откуда берётся размытие и почему оно возникает только на path элементах svg файла

Ответ 2



Для path даже при android:layerType="hardware" все линии сначала будут переведены с помощью CPU в растовое изображение, и только потом оно передается в GPU. И если после этого, изображению будет необходимо масштабирование, у path будет растягиваться/сжиматься растр, в отличии от примитивных фигур. Вот line например будет рисоваться нормально.

Комментариев нет:

Отправить комментарий