4

fresco を使用して、リスト ビューで画像を表示しています。しかし、私には問題があります。

CENTER_CROP のような縦横比を維持する方法を使用して画像をスケーリングし、スケーリングされた画像の高さが simpledraweeview の高さよりも小さくなると、simple-Drawee-View はスケーリングされた画像のサイズに合わせて自動的にサイズ変更されません。

  • 私は使用しようとしましたが、うまくいきandroid:adjustViewBounds = true ません。
  • 以下の方法も試しましたが、スケーリングされた高さを計算するために使用したいscaleYは、画像の高さがsimpe-drawee-viewの高さよりも小さい場合でも1を返します

    float[] f = new float[9]
    draweeView.getImageMatrix().getValues(f);
    float scaleY = f[Matrix.MSCALE_Y];
    Log.d("App","scale y is "+ scaleY);
    

上記のコドレットは、以下のメソッドで使用されます

private void loadImage(Uri fileUri,final SimpleDraweeView draweeView,int myImageHeight){

    draweeView.getLayoutParams().width = displayWidth;

    int selectedSize = (myImageHeight > displayWidth)? displayWidth : myImageHeight;

    draweeView.getLayoutParams().height= selectedSize;


    GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(context.getResources());

    GenericDraweeHierarchy hierarchy = builder
            .setProgressBarImage(new CircleProgressBarDrawable())
            .setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
            .build();


    ImageRequest requestBuilder = ImageRequestBuilder.newBuilderWithSource(fileUri)
            .setProgressiveRenderingEnabled(true)
            .build();

    //ImagePipeline imagePipeline = Fresco.getImagePipeline();

    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setOldController(draweeView.getController())
            .setImageRequest(requestBuilder)
            .build();
    draweeView.setHierarchy(hierarchy);
    draweeView.setController(controller);

     float[] f = new float[9]
     draweeView.getImageMatrix().getValues(f);
     float scaleY = f[Matrix.MSCALE_Y];
     Log.d("App","scale y is "+ scaleY);
}

結果: 赤い色は、単純な名宛人ビューの一部が画像で埋められていないことを示しています。これはスケール タイプ FIT_CENTER です。CENTER_CROP を使用すると、イメージがイメージ ビュー全体に表示され、イメージの一部が切り落とされてしまいます。

fresco simpe 名宛人ビューのサイズが変更されない

Q: スケーリングされた画像サイズを取得し、それを使用して simpleDraweeView のサイズを変更するにはどうすればよいですか? つまり、simpleDraweeView でサイズを調整するにはどうすればよいですか?

私はどんな助けにも感謝します。

4

2 に答える 2

7

simpledraweeview のサイズを変更するために、これを実装し、必要に応じて高さControllerListenerを変更しました。simpleDraweeView

private void loadImage(Uri fileUri,final SimpleDraweeView simpeDraweeView) {

    GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(context.getResources());

    GenericDraweeHierarchy hierarchy = builder
            .setProgressBarImage(new CircleProgressBarDrawable())
            .setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
            .build();


    ImageRequest requestBuilder = ImageRequestBuilder.newBuilderWithSource(fileUri)
            .setProgressiveRenderingEnabled(true)
            .build();


    ControllerListener<ImageInfo> contollerListener = new BaseContollerListener<ImageInfo>() {

    public void onFinalImageSet(String id, ImageInfo imageinfo,Animatable animatable) {

        if(imageinfo != null) {
           updateViewSize(imageinfo)
         }
    }

    DraweeContoller contoller = Fresco.newDraweeContollerBuilder()
                 .setContollerListener(contollerListener)
                 .setImageRequest(requestBuilder)
                 .build();

    simpleDraweeView.setHierarchy(hierarchy);
    simpleDraweeView.setController(contoller);

}

private void updateViewSize(ImageInfo imageinfo){
 //this is my own implementation of changing simple-drawee-view height
 // you canhave yours using imageinfo.getHeight() or imageinfo.getWidth();
 simpleDraweeView.getLayoutParams().height = imageinfo.getHeight();

   // don't forget to call this method. thanks to @plamenko for reminding me.

   simpleDraweeView.requestLayout()
}
于 2016-01-25T09:45:14.497 に答える
4

Fresco のドキュメントを読むことを強くお勧めします。ここにあるすべての質問は、すでにそこで回答されています。

名宛人ビューは、ImageView 属性 (adjustViewBounds、getImageMatrix など) をサポートしていません。ドキュメントを参照してください。

固有の寸法については、こちらのドキュメントを参照してください。

ビューのサイズを動的に変更する必要があり、それに伴うすべての欠点がある場合は、こちらで説明されているように、コントローラー リスナーを使用してそれを行うことができます。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2016-01-22T23:14:02.760 に答える