2016-12-26 3 views
1

Мне нужно загрузить изображение в SimpleDraweeView с URL-адреса или имени файла/Uri.Загрузить изображение из файла в правильном формате с использованием 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" /> 

Когда я загрузить изображение из URL, такие как 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 с помощью filename или Uri с правильным соотношение сторон, как это сделать?

ответ

0

В общем, мы не призываем людей использовать этот подход, поскольку чертежник может показывать более 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 –

Смежные вопросы