android实现圆形图片需要自定义ImageView控件,默认的ImageView是没有这样的效果,那么接下来就使用具体代码来实现。
创建ImageCircleView类继承于ImageView类
package com.tenghu.custom.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PaintFlagsDrawFilter; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.graphics.Xfermode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; /** * 圆形图片 * Created by Arvin_Li on 2014/10/15. */ public class ImageCircleView extends ImageView{ private static final Xfermode MASK_XFERMODE; private Bitmap mask; private Paint paint; static{ PorterDuff.Mode localMode=PorterDuff.Mode.DST_IN; MASK_XFERMODE=new PorterDuffXfermode(localMode); } public ImageCircleView(Context context,AttributeSet attrs,int defStyle){ super(context, attrs, defStyle); } public ImageCircleView(Context context,AttributeSet attrs){ super(context, attrs); } public ImageCircleView(Context context){ super(context); } private Bitmap createCircleMap(){ int w=getWidth();//获取图片的宽度 int h=getHeight();//获取图片的高度 Bitmap.Config localConfig=Bitmap.Config.ARGB_8888; Bitmap localBitmap=Bitmap.createBitmap(w,h,localConfig); Canvas canvas=new Canvas(localBitmap);//创建一个画板 Paint paint=new Paint(1);//创建画笔 paint.setColor(Color.WHITE);//设置画笔颜色 RectF rectF=new RectF(0.0F,0.0F,w,h); //绘制一个椭圆 canvas.drawOval(rectF,paint); return localBitmap; } @Override protected void onDraw(Canvas canvas) { Drawable drawable=getDrawable(); if(null==drawable) super.onDraw(canvas); else{ try { if(null==this.paint){ this.paint=new Paint(); this.paint.setFilterBitmap(false); this.paint.setXfermode(MASK_XFERMODE); } int w=getWidth();//获取图片资源的宽度 int h=getHeight();//获取图片资源的高度 int i=canvas.saveLayer(0.0f,0.0f,w,h,null,31); drawable.setBounds(0,0,w,h); drawable.draw(canvas); if((null==this.mask)||(this.mask.isRecycled())){ this.mask=createCircleMap(); } canvas.drawBitmap(this.mask,0.0F,0.0F,paint); canvas.restoreToCount(i); }catch (Exception e){ e.printStackTrace(); } } } }在xml中使用:
<com.tenghu.custom.view.ImageCircleView android:id="@+id/iv_head" android:layout_width="42dp" android:layout_height="42dp" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_alignParentLeft="true" android:src="@drawable/face"/>