简书链接:让simpleDraweeView实现自适应高宽圆角
文章字数:77,阅读全文大约需要1分钟
踩过坑的朋友都知道,要实现自适应又需要圆角,大部分框架都有毛病,包括这个也是有的.
解决方法如下
xml设置:

1
2
3
4
5
6
7
8
9
10
<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代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 @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);
}


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