Android CircleImageView自定义圆形与边框(圆形头像)详解

背景:

当前我们在使用图片过程中,都知道正常的ImageView是一个矩形RectF,RectF只需要知道两个对角坐标就可以确定该图形的大小

RectF rect=new RectF(int left,int top,int right,int bottom);

四个参数可以确定四个角的坐标和矩形的长以及宽。

但是我们在使用过程中进行会看见圆形或者不规则图片,比如三角形等图片展示,这是如何实现的呢?

其实这些图片的基础都是矩形图片,如果我们用剪刀能在这边图片进行任意裁剪,那最后的图片就是我们想要显示的嘛?其实这个思路是正确的。

那我们如何来实现这个呢?这就需要我们重写画布(即对画布的裁剪)

说明:我们在使用过程中,只要是对画布的裁剪,如果你不放心,可以把裁剪过的ImageView的drawable区回来,设置在正常的显示即可。

这个时候我们可以测试,发现。最终裁剪的是画布

1.思路:裁剪

裁剪这边其实需要我们用一个路径,即Canvas裁剪需要有一个路径,只有知道尺寸,裁缝才会沿着路径剪出精美的画布。

这时,我们需要借助一个工具类Path

Path path = new Path();
path.addCircle(width / 2, height / 2, width / 2 , Path.Direction.CW);

我们通过path路径,绘制出一个圆出来

path.addCircle(cx,cy,radius , Path.Direction.CW);

cx,cy:代表坐标

radius :圆的半径

Path.Direction.CW:代表绘制放心,是顺时针还是逆时针

注意:在做半径的时候,我们应该取宽或者高的最小值做半径

int radius=Math.min(width,height);

这时候圆已出来了,接下来就是裁剪

canvas.clipPath(path);

一定在绘制之前进行裁剪,否则裁剪会不生效。

这样,一个简单的裁剪就生成了 

2.边框颜色

借用上图,左上角有一个圆,并有一个红色的边框。

我们知道作图是在画布上的,所以需要在画布sper以后,生成新画布我们再进行绘图。

绘图我们需要画笔Paint

Paint paint = new Paint();
paint.setColor(Color.RED);//画笔颜色
paint.setStrokeWidth(10);//画笔的笔尖宽
paint.setStyle(Paint.Style.STROKE);//样式
paint.setAntiAlias(true);//锯齿
path.addCircle(width / 2, height / 2, width / 2, Path.Direction.CCW);
canvas.drawPath(path, paint);

1.初始化一个画笔,设置好画笔的参数

2.我们依旧用path画圆,

3.最后通过画布进行绘制。

完整代码如下:

@Override
protected void onDraw(Canvas canvas) {

    int width = getMeasuredWidth();
    int height = getMeasuredHeight();
    Path path = new Path();
    path.addCircle(width / 2, height / 2, width / 2 , Path.Direction.CCW);
    canvas.clipPath(path);
    super.onDraw(canvas);

    //如果需要在图形上进行二次绘画,需要调用super后,也就是剪切后的画布已生成,再进行创作
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    paint.setStrokeWidth(10);
    paint.setStyle(Paint.Style.STROKE);
    paint.setAntiAlias(true);
    path.addCircle(width / 2, height / 2, width / 2, Path.Direction.CCW);
    canvas.drawPath(path, paint);


}

解释:

有人会发现其他demo中会出现大量的代码,或者画笔的出现,以及BitmapShader来管理,我这边只是简单的处理,自身的熟悉依旧依赖ImageView去调试,你也可以通过BitmapShader生成你们业务需要的样式,拉伸或者填满等效果。这只是介绍入门

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android实现圆形剪裁框的方法有许多,以下是其中一种实现方式: 1. 创建一个圆形的 ShapeDrawable 可以通过创建一个圆形的 ShapeDrawable 对象来实现圆形剪裁框。在 drawable 目录下创建一个 xml 文件,例如 circular_shape.xml,内容如下: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@android:color/transparent" /> <stroke android:width="5dp" android:color="@android:color/white" /> </shape> ``` 这个 ShapeDrawable 对象是一个圆形,有一个白色的描边和一个透明的填充。 2. 创建一个 ImageView 在布局文件中创建一个 ImageView,设置其宽高相等,并设置 ScaleType 为 centerCrop。例如: ```xml <ImageView android:id="@+id/image_view" android:layout_width="200dp" android:layout_height="200dp" android:scaleType="centerCrop" /> ``` 3. 将 ShapeDrawable 设置为 ImageView 的背景 在代码中获取 ImageView 对象,并将 ShapeDrawable 对象设置为其背景。例如: ```java ImageView imageView = findViewById(R.id.image_view); ShapeDrawable shapeDrawable = (ShapeDrawable) ContextCompat.getDrawable(this, R.drawable.circular_shape); imageView.setBackground(shapeDrawable); ``` 这样,ImageView 就被圆形剪裁了,只显示了圆形区域内的图片。 ### 回答2: Android 圆形剪裁框是一种图形处理技术,常用于将图片或者其他视图以圆形形式显示。 实现圆形剪裁框的方法有很多种,其中常用的方法是使用 BitmapShader 和 Canvas 对图片进行裁剪和绘制。 首先,我们需要创建一个圆形的 Shape,可以使用 ShapeDrawable 或者自定义一个继承自 Drawable 的类。然后,通过设置 Drawable 的 Bounds 为图片的边界,即可限制绘制的区域为圆形。 接下来,我们需要获取源图像的 Bitmap 对象,并根据需要设置尺寸和缩放比例。然后,使用 BitmapShader 将 Bitmap 对象与圆形的 Shape 进行关联,创建一个 Paint 对象并设置 Shader 为 BitmapShader。 接着,我们创建一个新的 Bitmap,并创建一个 Canvas 对象并将其与 Bitmap 关联。然后,使用 Canvas 的 drawCircle 方法绘制一个圆形,通过设置 Paint 的 Xfermode 为 PorterDuff.Mode.SRC_IN,实现将 Bitmap 绘制到圆形区域的效果。 最后,我们将处理好的 Bitmap 绘制在指定的 View 或者 ImageView 中,并设置为背景或者源图像。 圆形剪裁框在 Android 开发中经常用于实现头像展示、圆形图标等功能。通过上述的步骤,我们可以将任意形状的图片剪裁为圆形实现更加美观和独特的视觉效果。同时,我们也可以通过添加边框、描边等操作,进一步丰富圆形剪裁框的效果。 总之,Android 圆形剪裁框是一种常用的图形处理技术,通过对 Bitmap 进行裁剪和绘制,可以实现图片圆形形式展示的效果。 ### 回答3: Android圆形剪裁框是一种常见的图像处理技术,用于将图像裁剪圆形形状。在Android开发中,可以使用一些库或自定义视图来实现这个效果。 一种常见的实现方式是使用ImageView和BitmapShader结合,可以按以下步骤进行操作: 1. 通过ImageView来显示要剪裁的图像,可以在布局文件中添加一个ImageView控件。 2. 加载图像资源到Bitmap对象中。 3. 创建一个正方形的 Bitmap 对象作为剪裁框的背景,可以使用Bitmap.createBitmap()方法,并设置宽高为图像的宽高中较大的值。 4. 创建一个BitmapShader对象,用于指定图像的绘制方式为填充剪裁框。可以使用BitmapShader的构造方法并传入图像资源和Shader.TileMode的相关参数。 5. 创建一个Paint对象,并设置其颜色过滤器为一个PorterDuffColorFilter。这个过滤器用于限制只在剪裁框内绘制图像。 6. 创建一个圆形的Path对象,用于绘制剪裁框形状。 7. 在onDraw方法中,绘制剪裁框的背景Bitmap对象,并设置Paint的图像绘制方式为Shader。然后,使用drawCircle方法绘制圆形剪裁框。 8. 设置ImageView裁剪模式为圆形,可以使用ImageView.setScaleType()方法设置ScaleType为CENTER_CROP。 通过以上步骤,就可以将图像裁剪圆形剪裁框的形状。这样,在ImageView中显示的图像就会被自动裁剪圆形,并填充到指定的剪裁框中。 总结起来,实现Android圆形剪裁框的关键是使用BitmapShader来绘制图像,并通过Paint的过滤器限定绘制范围。另外,利用ImageView的ScaleType属性可以更方便地实现圆形剪裁框的显示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值