SimpleDraweeView 在 fresco 中缩放图像后不调整大小
SimpleDraweeView not resizing after scaling image in fresco
我正在使用 fresco 在列表视图中显示图像。但是我有一个问题。
当我使用 CENTER_CROP 等保持纵横比的方法缩放我的图像时,缩放后的图像高度变得小于我的 simpledraweeview 的高度,simple-Drawee-View 不会自动调整大小以匹配缩放图像的大小。
- 我试过
android:adjustViewBounds = true
但是没用
我也试过下面的方法但是scaleY 我想用它来计算缩放高度 returns 1 即使图像高度小于 simpe-drawee-view 的高度
float[] f = new float[9]
draweeView.getImageMatrix().getValues(f);
float scaleY = f[Matrix.MSCALE_Y];
Log.d("App","scale y is "+ scaleY);
上面的codlet用在下面的方法中
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 调整它的大小?
我将不胜感激任何帮助。
我强烈建议您阅读 Fresco 文档。您在这里的所有问题都已在此处得到解答。
Drawee视图不支持ImageView属性(adjustViewBounds、getImageMatrix等)。见 documentation.
再次阅读文档 here 中的内在维度。
如果您确实需要动态调整视图的大小,并且伴随着随之而来的所有缺点,您可以通过使用控制器侦听器来实现 。
希望对您有所帮助,如果您还有任何问题,请告诉我。
为了使 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()
}
我正在使用 fresco 在列表视图中显示图像。但是我有一个问题。
当我使用 CENTER_CROP 等保持纵横比的方法缩放我的图像时,缩放后的图像高度变得小于我的 simpledraweeview 的高度,simple-Drawee-View 不会自动调整大小以匹配缩放图像的大小。
- 我试过
android:adjustViewBounds = true
但是没用 我也试过下面的方法但是scaleY 我想用它来计算缩放高度 returns 1 即使图像高度小于 simpe-drawee-view 的高度
float[] f = new float[9] draweeView.getImageMatrix().getValues(f); float scaleY = f[Matrix.MSCALE_Y]; Log.d("App","scale y is "+ scaleY);
上面的codlet用在下面的方法中
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 调整它的大小?
我将不胜感激任何帮助。
我强烈建议您阅读 Fresco 文档。您在这里的所有问题都已在此处得到解答。
Drawee视图不支持ImageView属性(adjustViewBounds、getImageMatrix等)。见 documentation.
再次阅读文档 here 中的内在维度。
如果您确实需要动态调整视图的大小,并且伴随着随之而来的所有缺点,您可以通过使用控制器侦听器来实现
希望对您有所帮助,如果您还有任何问题,请告诉我。
为了使 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()
}