一提到弄一个圆形的头像,很多人马上会想到用CircleIamgeView,但其实自己写一个也并不难自己写的部分也就20行代码,主要是用到PoterDuffXfermode来设置
一提到弄一个圆形的头像,很多人马上会想到用CircleIamgeView,但其实自己写一个也并不难自己写的部分也就20行代码,主要是用到PoterDuffXfermode来设置两个图层交集区域的显示方式
首先写一个继承自ImageView的控件
public class CircleImageView extends ImageView
然后创建构造方法
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
之后重写onDraw方法
@Override
protected void onDraw(canvas canvas) {
//获得图片的宽度
int width=getWidth();
//获得图片的高度
int height=getHeight();
//短的二分之一作为半径
int radius=height>width?width/2:height/2;
//重新定义的一个画布,这一步很关键
Paint mPaint = new Paint();
//抗锯齿
mPaint.setAntiAlias(true);
Bitmap bitmap = Bitmap.createBitmap(width,height,
Bitmap.Config.ARGB_8888);
Canvas bitmapCanvas = new Canvas(bitmap);
super.onDraw(bitmapCanvas);
//圆形的框
Bitmap cB = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
Canvas cCanv = new Canvas(cB);
//在控件中间画一个
cCanv.drawCircle(width/ 2, height/ 2, radius,
mPaint);
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mPaint);
//dst是后画的图形
mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.DST_IN));
//一定要用之前的画布,不然会出现边角是黑色
bitmapCanvas.drawBitmap(cB, 0.0f, 0.0f, mPaint);
//给图形加边框
Paint paint =new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
paint.setColor(Color.BLACK);
canvas.drawCircle(width/ 2, height/ 2, radius,
paint);
}
一个简单的CircleImageView就做成了,你们还可以把边框弄成一个属性还有配置相应的方法,让使用者更加方便的使用
它的用法也是和ImageView一模一样的
<com.example.jkgeekjk.roadtodevelop3.CircleImageView
Android:layout_width="match_parent"
android:src="@drawable/avastar"
android:layout_height="match_parent" />
效果图:
您可能感兴趣的文章:Android使用CircleImageView实现圆形头像的方法Android中使用CircleImageView和Cardview制作圆形头像的方法Android自定义控件仿QQ编辑和选取圆形头像利用Android中BitmapShader制作自带边框的圆形头像Android应用中绘制圆形头像的方法解析Android实现本地上传图片并设置为圆形头像Android根据电话号码获得联系人头像实例代码Android手机拍照或选取图库图片作为头像Android实现从本地图库/相机拍照后裁剪图片并设置头像Android利用CircleImageView实现圆形头像的方法
--结束END--
本文标题: 20行Android代码写一个CircleImageView
本文链接: https://lsjlt.com/news/24432.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0