Edi*_*sar 4 android facebook image fresco
我正在使用 fresco 在列表视图中显示图像。但是我有一个问题。
当我使用像 CENTER_CROP 这样保持纵横比的方法缩放我的图像,并且缩放后的图像高度小于我的 simpledraweeview 的高度时,simple-Drawee-View 不会自动调整大小以匹配缩放图像的大小。
android:adjustViewBounds = true 但它不起作用。我也尝试了下面的方法,但是即使图像高度小于 simpe-drawee-view 的高度,我想用来计算缩放高度的scaleY也会返回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 时,图像会填满整个图像视图,并且图像的某些部分被切掉,我不希望这样
问:我如何获得缩放的图像大小并使用它来调整我的 simpleDraweeView 或换句话说,我如何让我的 simpleDraweeView 调整它的大小?
我将不胜感激任何帮助。
为了使 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()
}
| 归档时间: | 
 | 
| 查看次数: | 6308 次 | 
| 最近记录: |