简书链接:让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); }
|
切忌不要写死宽度,否则会导致圆角又失效了。