欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

20行Android代码写一个CircleImageView

程序员文章站 2024-03-05 20:11:37
一提到弄一个圆形的头像,很多人马上会想到用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" />

效果图:

20行Android代码写一个CircleImageView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。