0
点赞
收藏
分享

微信扫一扫

让simpleDraweeView实现自适应高宽+圆角


踩过坑的朋友都知道,要实现自适应又需要圆角,大部分框架都有毛病,包括这个也是有的.
解决方法如下
xml设置:

<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv_banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/young_author_page_margin_left_right"
android:scaleType="centerCrop"
app:actualImageScaleType="centerCrop"
app:radiusX="@{@dimen/young_theme_radius}"
app:ratioimage="@{model.image}" />

databind代码如下

@BindingAdapter({"ratioimage", "radiusX"})
public static void imageloaderxx(final SimpleDraweeView imageView, final String image,
final float radius) {
if (image == null) {
return;
}
/*
if (TextUtils.isEmpty(image)) {
return;
}
*/

final ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();

final int viewWidth = imageView.getWidth();
if (viewWidth == 0) {
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
if (imageView.getWidth() == 0) {


return;
}

imageloaderxx(imageView, image, radius);
}
});
return;

}

ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
@Override
public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) {
if (imageInfo == null) {
return;
}
int height = imageInfo.getHeight();
int width = imageInfo.getWidth();


layoutParams.width = imageView.getWidth();
int heightScale = (int) ((float) (viewWidth * height) / (float) width);
layoutParams.height = heightScale;
imageView.setLayoutParams(layoutParams);



setImageRadius(imageView, radius);


// imageView.setAspectRatio(height / width);
}

@Override
public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
Log.d("TAG", "Intermediate image received");
}

@Override
public void onFailure(String id, Throwable throwable) {
throwable.printStackTrace();
}
};

DraweeController controller = Fresco.newDraweeControllerBuilder().setControllerListener(controllerListener).setUri(Uri.parse(image)).build();
imageView.setController(controller);
}

切忌不要写死宽度,否则会导致圆角又失效了。

举报

相关推荐

0 条评论