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"/>