从服务器正确下载并显示图像

时间:2017-05-01 06:59:56

标签: android picasso android-glide fresco

现在,在我的应用中,每个占位符的大小都是在xml中设置的,在下载图像后,它会调整 ImageView 高度并产生可怕的视觉效果。

如何获取图像尺寸,即下载并应显示在中 ImageView,制作与Facebook应用程序实时Feed相同的占位符大小?也许我应该为从服务器下载的json文件中的每个链接包含图像比率,或者FrescoGlidePicasso是否有一些技巧可以实现这一点?

2 个答案:

答案 0 :(得分:1)

如果要在下载图像之前将占位符调整为实际图像尺寸,则必须以某种方式从服务器获取此信息。您可以像已经建议的那样,将图像尺寸/宽高比包含在请求中,然后使用该信息来预先正确调整视图大小。

由于您提到的这种可怕的视觉效果,Fresco不支持wrap_content,但它支持设置您可以使用服务器数据设置的DraweeView的宽高比。

另见http://frescolib.org/docs/wrap-content.html

答案 1 :(得分:-1)

尝试使用ResourceTranscoder滑翔请求,如下所述:

Glide
    .with(this)
    .load(imageUrl)
    .asBitmap()
    .transcode(new BitmapSizeTranscoder(), Size.class)
    .into(new SimpleTarget<Size>() {
        @Override public void onResourceReady(Size size, GlideAnimation glideAnimation) {
            Log.w("SIZE", String.format(Locale.ENGLISH, "%dx%d", size.width, size.height));
        }
    });

class Size {
    int width;
    int height;
}

class BitmapSizeTranscoder implements ResourceTranscoder<Bitmap, Size> {
    @Override public Resource<Size> transcode(Resource<Bitmap> toTranscode) {
        Bitmap bitmap = toTranscode.get();
        Size size = new Size();
        size.width = bitmap.getWidth();
        size.height = bitmap.getHeight();
        return new SimpleResource<>(size);
    }
    @Override public String getId() {
        return getClass().getName();
    }
}