选择哪一个RoundedImageView类库
我们可以在网上找到很多关于显示圆角的ImageView开源控件,那么我选择的是哪一款呢?
答案是https://github.com/vinc3m1/RoundedImageView。
运行效果
为什么是这一款RoundedImageView类库?
这是一款支持圆角,椭圆,圆形的RoundedImageView类库,可以生成ImageView和Drawable。
并且支持ScaleType和TileModes属性。
网上有许多其他的可以实现类似效果的类库,但是这一款是运行效率最高的,原因如下:
- 没有使用源bitmap的拷贝
- 没有使用不是硬件加速,非抗锯齿的clipPath
- 没有使用setXfermode修剪bitmap,从而导致Canvas绘制两遍bitmap
AndroidStudio中引用该类库
在build.gradle中添加如下代码:
repositories { mavenCentral() } dependencies { compile 'com.makeramen:roundedimageview:2.2.1' }
如何使用
在xml文件中引用:
<com.makeramen.roundedimageview.RoundedImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/imageView1" android:src="@drawable/photo1" android:scaleType="fitCenter" app:riv_corner_radius="30dip" app:riv_border_width="2dip" app:riv_border_color="#333333" app:riv_mutate_background="true" app:riv_tile_mode="repeat" app:riv_oval="true" />
在代码中引用:
RoundedImageView riv = new RoundedImageView(context); riv.setScaleType(ScaleType.CENTER_CROP); riv.setCornerRadius((float) 10); riv.setBorderWidth((float) 2); riv.setBorderColor(Color.DKGRAY); riv.mutateBackground(true); riv.setImageDrawable(drawable); riv.setBackground(backgroundDrawable); riv.setOval(true); riv.setTileModeX(Shader.TileMode.REPEAT); riv.setTileModeY(Shader.TileMode.REPEAT);
使用Picasso类库加载网络图片,然后用Transformation方法转化
Transformation transformation = new RoundedTransformationBuilder() .borderColor(Color.BLACK) .borderWidthDp(3) .cornerRadiusDp(30) .oval(false) .build(); Picasso.with(context) .load(url) .fit() .transform(transformation) .into(imageView);