Я пытаюсь использовать Glide, чтобы получить ресурс SVG из URL-адреса, но я не знаю, как получить объект Bitmap вместо его загрузки в представление.
Причина в том, что мне нужно загрузить некоторые файлы SVG на виджет.Получение растрового изображения из ресурса Urg SVG
Я использовал этот пример: https://stackoverflow.com/a/30938082/3346625
UPDATE 1: Настройка GenericRequestBuilder
final RemoteViews fViews = views;
final int fViewId = viewId;
Runnable myRunnable = new Runnable() {
@Override
public void run() {
GenericRequestBuilder<Uri, InputStream, SVG, Bitmap> requestBuilder;
requestBuilder = Glide.with(mContext)
.using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgBitmapTranscoder(), Bitmap.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
.decoder(new SvgDecoder())
.placeholder(R.drawable.ic_launcher)
.error(R.drawable.no_icon)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.load(Uri.parse(url));
requestBuilder.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
fViews.setImageViewBitmap(fViewId, resource);
}
});
}
};
mainHandler.post(myRunnable);
- мне пришлось использовать Runnable, как requestBuilder.into должен работать в главном потоке.
Как я могу получить растровое изображение, чтобы позже использовать его с помощью RemoteView?
Подождите, если вы уже выключены, почему вы хотите использовать Glide? Вероятно, проще просто получить сетевой поток и самостоятельно декодировать SVG. Или, если вы уже на самом деле, почему вы отправляете сообщение на главную? – TWiStErRob
Я также сделал это, запустил AsyncTask, получил файл svg, а затем использовал парсер SVG, но пришел к той же проблеме, изображения не отображаются. Не знаю, связано ли это с тем, что я должен использовать RemoveViews как final. –
Тогда, похоже, у вас совершенно другая проблема. Ключ в том, что вы должны иметь 'views.setImageViewBitmap' выполнить раньше, чем' manager.updateAppWidget (ids, views) '. В настоящее время похоже, что вы запускаете Runnable, который затем запускает загрузку async Glide, и сразу после этого вы вызываете 'updateAppWidget', даже не давая возможности либо выполнить Runnable, либо Glide-запрос. Это означает, что «менеджер» получает представления без набора битмапов, обновляет виджеты, а затем через какое-то время реальный битмап установлен на RemoteViews, но это будет просто сбор мусора. – TWiStErRob