Использовать в проекте implementation 'com.github.bumptech.glide:glide:4.8.0'
Получить с сервера ссылки (.svg)
Как загрузить этот значок .svg
для данного URL и показать его в ImageView с помощью glide?
Теперь я использую что-то вроде этого:
Glide.with(bankLogoView.context)
.`as`(PictureDrawable::class.java)
.load(data.logoUrl)
.listener(SvgSoftwareLayerSetter())
.apply(options)
.into(bankLogoView)
Где есть:
private val options = RequestOptions().centerCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.ic_logo_splash)
Также добавлены следующие классы SvgDecoder
:
class SvgDecoder : ResourceDecoder<InputStream, SVG> {
override fun handles(source: InputStream, options: Options): Boolean {
// TODO: Can we tell?
return true
}
@Throws(IOException::class)
override fun decode(source: InputStream, width: Int, height: Int,
options: Options): Resource<SVG>? {
try {
val svg = SVG.getFromInputStream(source)
return SimpleResource(svg)
} catch (ex: SVGParseException) {
throw IOException("Cannot load SVG from stream", ex)
}
}
}
SvgDrawableTranscoder:
class SvgDrawableTranscoder : ResourceTranscoder<SVG, PictureDrawable> {
override fun transcode(toTranscode: Resource<SVG>,
options: Options): Resource<PictureDrawable>? {
val svg = toTranscode.get()
val picture = svg.renderToPicture()
val drawable = PictureDrawable(picture)
return SimpleResource(drawable)
}
}
SvgModule:
@GlideModule
class SvgModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide,
registry: Registry) {
registry.register(SVG::class.java, PictureDrawable::class.java, SvgDrawableTranscoder())
.append(InputStream::class.java, SVG::class.java, SvgDecoder())
}
// Disable manifest parsing to avoid adding similar modules twice.
override fun isManifestParsingEnabled(): Boolean {
return false
}
}
SvgSoftwareLayerSetter:
class SvgSoftwareLayerSetter : RequestListener<PictureDrawable> {
override fun onLoadFailed(e: GlideException?, model: Any, target: Target<PictureDrawable>,
isFirstResource: Boolean): Boolean {
val view = (target as ImageViewTarget<*>).view
view.setLayerType(ImageView.LAYER_TYPE_NONE, null)
return false
}
override fun onResourceReady(resource: PictureDrawable, model: Any,
target: Target<PictureDrawable>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
val view = (target as ImageViewTarget<*>).view
view.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null)
return false
}
}
Но я также отображаю только параметры.data.logoUrl
не пусто, но не отображает
UPD:
W / Glide: загрузка не удалась для https://mandarine.com/logos/providers/xf/fake_demobank_xf.svg с размером [65x66] class com.bumptech.glide.load.engine.GlideException: не удалось загрузить ресурс
Попытка жестко закодировать URL-адрес из Google, когда я .load("url")
, например:
https://upload.wikimedia.org/wikipedia/sco/7/71/Pringles.svg
Но также не показывалось изображение.
Второй способ, что я пытался сделать : реализовать эту библиотеку
implementation 'com.caverock:androidsvg-aar:1.3'
Затем изменил мой макет:
<com.caverock.androidsvg.SVGImageView
android:id="@+id/bankLogoView"
style="@style/icon_account_view"
app:svg="@drawable/ic_buy_violet"/>
И после этого в моем держателе что-то вроде этого:
bankLogoView.setImageAsset("wallet.svg")
но как я могу скачать файл .svg изсервер