選擇哪一個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'
}
如何使用
<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);