踩过坑的朋友都知道,要实现自适应又需要圆角,大部分框架都有毛病,包括这个也是有的.
解决方法如下
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);
}
切忌不要写死宽度,否则会导致圆角又失效了。