首页 > 系统 > Android > 正文

20行Android代码写一个CircleImageView

2019-12-12 05:45:15
字体:
来源:转载
供稿:网友

一提到弄一个圆形的头像,很多人马上会想到用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" />

效果图:

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表