如何使用Firebase中的Glide加载部分图像?

时间:2017-02-20 09:57:24

标签: android firebase imageview android-glide

我有imageview,它应该只显示图像的一部分(部分适合屏幕的一部分)。用户点击后,将打开整个图像。但我无法弄明白,如何只将部分图像加载到imageview中。问题是Glide始终将图像融入到imageview中。

Glide.with(context)
     .using(new FirebaseImageLoader())
     .load(storageReference)
     .into(imageView);

现在看起来如何。红色部分是ImageView。

How it is working now

我希望如何拥有它。

How I would like to have it

修改

以下代码适合,但它显示整个图像,只显示其中的一部分并且它会破坏比例。

android:scaleType="fitXY"
android:adjustViewBounds="true"

enter image description here

5 个答案:

答案 0 :(得分:2)

XML的{​​{1}}中添加比例尺类型。添加此ImageView

答案 1 :(得分:1)

Glide.with(mContext)
                .using(new FirebaseImageLoader())
                .load(storageReference)
                .asBitmap()
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);
                        imageView.setImageBitmap(targetBitmap);
                    }
                });

在这里,您可以根据尺寸调整Glide的位图大小。但请确保您提供的尺寸始终小于实际位图。

由于您在列表中使用此代码,因此应该全局声明Bitmap targetBitmap;以在整个列表中重用相同的位图对象。这将减少应用程序的RAM消耗。

如果您需要进一步明确代码Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);

,请阅读与裁剪位图相关的链接
  

不要忘记将targetBitmap设为Global,否则内存影响会太高。

答案 2 :(得分:0)

只需将其添加到您的Imageview

即可
page-break-inside

答案 3 :(得分:0)

将其添加到xml中

 android:scaleType="fitXY"
 android:adjustViewBounds="true"

答案 4 :(得分:0)

好的,谢谢Mohammed Atif,Patel Jaimin和Henry,我最终得到了以下解决方案。

<ImageView
 android:id="@+id/ivImage"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:scaleType="matrix"/>

 Glide.with(this)
        .using(new FirebaseImageLoader())
        .load(storageReference)
        .asBitmap()
        .into(new SimpleTarget<Bitmap>() {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    Bitmap targetBitmap = Bitmap.createBitmap(resource, 0, 0, resource.getWidth(), resource.getHeight());
                    ivImage.setImageBitmap(targetBitmap);

                    final Matrix matrix = ivImage.getImageMatrix();
                    final float imageWidth = ivImage.getDrawable().getIntrinsicWidth();
                    final float scaleRatio = ivImage.getWidth() / imageWidth;
                    matrix.postScale(scaleRatio, scaleRatio);
                    ivImage.setImageMatrix(matrix);
                }
            });