RoundedImageView源碼解析(一) 簡介

選擇哪一個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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章