使用Picasso或Glide或任何兑现库将Drawable对象加载到ImageView中 - Android

时间:2016-01-01 09:41:26

标签: android drawable android-drawable picasso android-glide

我需要将App图标加载到图像视图中。在列表视图中加载它太慢了。

我试图用Picasso或Glide加载它。

我无法找到如何使用任何这些库将Drawable对象(NOT FROM RESOURCES)加载到图像视图中?

获取drawable的功能:

public Drawable getIcon() {
    if (icon == null) {
        icon = getResolveInfo().loadIcon(ctx.getPackageManager());
    }
    return icon;
}

3 个答案:

答案 0 :(得分:1)

你可以这样做

Drawable icon = ....
Bitmap bitmap = ((BitmapDrawable) icon).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
Glide.with(context)
  .load(bitmapdata)
  .into(imageView);

但我不确定在这种情况下Glide(或Picasso)将使用缓存。

答案 1 :(得分:0)

您可以为毕加索创建自己的RequestHandler。有一个教程here

例如,

class AppIconRequestHandler extends RequestHandler {
  @Override
  public boolean canHandleRequest(Request data) {
    return true; // or do validation here
  }

  @Override
  public Result load(Request request, int networkPolicy) {
    // Not sure if DISK or correct or if it should be something else, but it works for me.
    return new Result(yourApp.getIcon().bitmap, Picasso.LoadedFrom.DISK); 
  }
}

// When you want to show the icon
Picasso picasso = Picasso.Builder(context)
            .addRequestHandler(new AppIconRequestHandler())
            .build()

picasso.load(packageName)
            .placeholder(placeholderIcon)
            .into(imageView)

顺便说一下,别忘了缩放app图标!你不能依赖它们成为小图像,你最终可能会使用比你需要的更多的ram。

答案 2 :(得分:-3)

这是使用Picasso库。

String url = "some url to your image";
ImageView thumbnail = (ImageView) findViewById(R.id.thumbnail);
Picasso.with(context).load(url).into(thumbnail);