Я пытаюсь использовать Glide, чтобы получить ресурс SVG из URL-адреса, но я не знаю, как получить объект Bitmap вместо того, чтобы загружать его в представление.
Причина этого в том, что мне нужно загрузить несколько файлов SVG на виджете.
Я использовал этот пример: https://stackoverflow.com/a/30938082/3346625
ОБНОВЛЕНИЕ 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?
views.setImageViewBitmap
раньше, чемmanager.updateAppWidget(ids, views)
. В настоящее время это выглядит так, как будто вы запускаете Runnable, который затем запускает асинхронную загрузку Glide, и сразу после этого вы вызываетеupdateAppWidget
, даже не давая шанса выполнить запрос Runnable или Glide. Это означает, чтоmanager
получает представления без набора растровых изображений, обновляет виджет(ы), а затем некоторое время спустя для реального растрового изображения устанавливается значение RemoteViews, но это будет просто сборщиком мусора. - person TWiStErRob   schedule 02.10.2015.skipMemoryCache(true).diskCacheStrategy(NONE)
на эту загрузку Glide, чтобы доказать, что она будет работать во всех случаях, особенно в первом после установки. В качестве еще одной проверки SVG вы можете попробовать сохранить растровое изображение на диск (bmp.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(filename))
), чтобы увидеть, есть ли в нем вообще какой-либо контент, как вы ожидаете. - person TWiStErRob   schedule 02.10.2015setImageViewBitmap
должен быть вызван до возвратаRemoteViews
изgetViewAt()
, что может быть проблематично. - person TWiStErRob   schedule 02.10.2015getViewAt
, чтобы Bitmap можно было установить просто синхронно внутри метода. - person TWiStErRob   schedule 02.10.2015