圆形的ImageView

主要用于自己以后使用,英语不好,都是百度翻译的。

源代码以及原文 点这里 

  圆形的ImageView

		 一个稳定的圆形的ImageView有着完美的轮廓图像。这是基于RoundedImageView的来自于vince Mi。技术建议罗曼
				
<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:border_width="2dp"
    app:border_color="#FF000000"/>

它使用一个BitmapShader和does not
 
  • 创建一个副本的原始位图
  • 使用一个clipPath(无论是硬件加速还是反锯齿)
  • 使用setXfermode夹位图(这意味着到画布上绘制两次)
这只是一个定制ImageView,而不是一个定制Drawable或两者的结合,它可以用于各种各样的画板,即PicassoDrawable从Picasso 或其他非标准画板(需要一些测试)。

Gradle

dependencies {
    ...
    compile 'de.hdodenhof:circleimageview:1.3.0'
}

使用:

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:border_width="2dp"
    app:border_color="#FF000000"/>

限制:

  • ScaleType的值必须是CENTER_CROP,如果你试图改变它。会报一个异常。这是(目前)设计的完美轮廓图像。
  • 使adjustViewBounds不支持,因为这需要一个不受支持的ScaleType
  • 如果你用Picasso抓取图片,您需要设置noFade()选项来避免混乱图像。如果你想保持渐显动画,你必须获取图像到一个目标和应用自定义动画设置时源在onBitmapLoaded CircleImageView();
  • 使用了一个TransitionDrawable随着 CircleImageView没有正常工作,导致混乱图像。
源代码以及原文 点这里 



实现圆形 ImageView 有多种方法,以下为你详细介绍: ### 使用自定义 Shape 实现圆形 使用自定义 Shape 可以实现圆形 ImageView。主要使用 `Canvas` 和 `Paint` 类来绘制圆形图像,可能涉及到 `Bitmap` 和 `Matrix` 来处理图像 [^1]。 ### 使用第三方库 NiceImageView 可以通过在布局文件中使用 `com.shehuan.niv.NiceImageView` 并设置相关属性来实现圆形 ImageView。示例代码如下: ```xml <com.shehuan.niv.NiceImageView android:id="@+id/music_image" android:layout_width="160dp" android:layout_height="160dp" app:border_color="@color/white" app:border_width="4dp" android:src="@mipmap/ic_launcher" app:is_circle="true" /> ``` 当 `is_circle` 为 `true` 时为圆形,否则为正方形 [^2]。 ### 自定义 ImageView 可以自定义 `ImageView` 来实现圆形效果,常见的有以下几种方式: - **BitmapShader**:使用着色器来实现圆形效果。 - **Xfermode**:使用图层叠加的方式实现。 - **ClipPath**:通过对画布裁剪的方式来实现。 - **RoundedBitmapDrawable**:利用系统 API 圆角类实现 [^3]。 ### 利用画布裁剪实现 通过对画布裁剪的方式也能实现圆形 ImageView,示例代码如下: ```java canvas.drawRoundRect(new RectF(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()), ...); ``` 此方法为在自定义 `ImageView` 里,重写 `onDraw` 方法并对画布进行裁剪 [^4]。 ### 图层叠加实现 实现过程涉及三个画布,分别是整个视图的画布函数形参 `canvasA`、图片画图 `canvasB`、遮罩层 `canvasC`。主要实现步骤是先绘制 `B`,再设置画笔格式为 `DST_IN`,然后在 `B` 上绘制 `C`,最后把 `B` 绘制到 `A` 上 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值