2016-12-26 50 views
1

我必須從URL或文件名/ Uri中將圖像加載到SimpleDraweeView使用Fresco從文件中以正確的高寬比加載圖像

這是我的xml佈局:

<com.facebook.drawee.view.SimpleDraweeView 
        android:id="@+id/image" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        fresco:actualImageScaleType="centerCrop" 
        fresco:placeholderImage="@color/wait_color" 
        fresco:placeholderImageScaleType="centerCrop" 
        fresco:roundTopLeft="true" 
        fresco:roundTopRight="true" 
        fresco:roundBottomLeft="false" 
        fresco:roundBottomRight="false" 
        fresco:roundedCornerRadius="3dp" /> 

當我加載從網址諸如Facebook或Instagram的圖像時,得到width和圖像的height並且基於這一點,我計算縱橫比和其設置爲SimpleDraweeView這樣的:

imageUrl = intent.getExtras().getString(KEY_IMAGE_URL); 

       int width = intent.getExtras().getInt(KEY_WIDTH); 
       int height = intent.getExtras().getInt(KEY_HEIGHT); 

       float aspectRatio = (float) width/height; 

       image.setAspectRatio(aspectRatio); 

       Uri uri = Uri.parse(imageUrl); 
       ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) 
         .setProgressiveRenderingEnabled(true) 
         .setAutoRotateEnabled(true) 
         .build(); 
       DraweeController controller = Fresco.newDraweeControllerBuilder() 
         .setImageRequest(request) 
         .setOldController(image.getController()) 
         .build(); 
       image.setController(controller); 

現在,我需要能夠加載圖像到SimpleDraweeView使用filenameUri與正確長寬比,我該怎麼做?

回答

0

一般來說,我們不鼓勵人們使用這種方法,因爲Drawee可能會顯示超過1個事物並且沒有真正的固有尺寸。 Read more about the reasons why wrap_content is not supported here。這個頁面在最後一段還有一個鏈接,如何一個controller listener can be used for this。 但是,由於Fresco文檔中列出的所有問題,考慮採用不同的方法可能會更好。例如,固定大小和適當的比例類型可以更好地工作。

0

試試這個:
設置adjustViewBounds = true

-1

解決它。剛剛獲得圖像的寬度和高度並計算縱橫比。

filename = intent.getExtras().getString(KEY_FILE); 
      if (!TextUtils.isEmpty(filename)) { 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inJustDecodeBounds = true; 
       BitmapFactory.decodeFile(filename, options); 
       int height = options.outHeight; 
       int width = options.outWidth; 

       f = new File(filename); 
       Uri uri = Uri.fromFile(f); 

       float aspectRatio = (float) width/height; 

       image.setAspectRatio(aspectRatio); 
       ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) 
         .setProgressiveRenderingEnabled(true) 
         .setAutoRotateEnabled(true) 
         .build(); 
       DraweeController controller = Fresco.newDraweeControllerBuilder() 
         .setImageRequest(request) 
         .setOldController(image.getController()) 
         .build(); 
       image.setController(controller); 
      } 
+0

這比使用像我在我的解決方案中建議的'ControllerListener'更低效。看看https://stackoverflow.com/questions/33955510/facebook-fresco-using-wrap-conent/34075281#34075281 –