2017-02-20 66 views
2

我有imageview,它應該只顯示圖像的一部分(適合部分屏幕的部分)。用戶點擊後,它會打開整個圖像。但我無法弄清楚,如何只將圖像的一部分加載到imageview中。問題在於Glide總是將圖像放入imageview。如何僅通過Firebase中的Glide加載圖像的一部分?

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

+0

您可以使用simpletarget在更新到imageView之前處理圖像 –

+0

任何示例如何? – Michalsx

+0

我更新了答案 –

回答

1

在你的ImageViewXML添加音階類型。添加此android:scaleType="matrix"

+0

我認爲你應該在負值中加上marginRight和marginBottom。 –

+0

android:scaleType =「matrix」是解決方案。我有問題,該圖像沒有足夠的重點來覆蓋從一邊到另一邊顯示的圖像視圖。這可以通過重新採樣圖像或使用android:scaleY和android:scaleX來處理。 – Michalsx

+0

好的,希望你喜歡我的解決方案。添加你也可以申請我的第二個解決方案。在你的ImageView從右和底部剪切,並給你相同的效果,你想要的。 –

0

只需添加到您的ImageView

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

這隻會使圖像適合ImageView,而不會產生任何不需要的背景。但是這個人想要顯示圖像的一部分。 –

+0

謝謝,但它似乎不是解決方案,你可以在我的問題EDIT中看到。 – Michalsx

+0

您是否嘗試過其他縮放類型?像matrix,centercrop等 –

0

添加到這一點你的XML

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

謝謝,但它似乎不是解決方案,你可以在我的問題EDIT中看到。 – Michalsx

+0

你也可以使用android:scaleType =「centerCrop」 –

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); 
        } 
       }); 

在這裏,你可以從滑翔根據自己的尺寸調整你的位圖。但請確保您提供的尺寸始終小於實際位圖。

由於您在列表中使用此代碼,應該全局聲明Bitmap targetBitmap;以在整個列表中重用相同的位圖對象。這將減少您的應用程序的RAM消耗。

與裁剪位圖閱讀的鏈接,如果你需要進一步澄清的代碼Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);

不要忘記將targetBitmap作爲全局的,否則內存的影響會太高。

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); 
       } 
      }); 
相關問題