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



更多相关文章

  1. Android获取网络图片应用示例
  2. android调用系统的相机服务
  3. android&&ScaleType android:scaleType="centerCrop"这个属性把
  4. Android和iOS对矢量图片的支持
  5. android中有关图片的处理
  6. Android常用到得方法积累
  7. Android(安卓)压缩工具类
  8. Android中的GalleryView实例演示-周末福利有美女图
  9. ViewPager用法(一)图片+原点+循环播放

随机推荐

  1. Android(安卓)各版本关闭 Selinux 的方法
  2. Android入门级之WebView的使用
  3. Android中ProgressDialog的使用
  4. Android(安卓)onMeasure
  5. Android(安卓)View动画——自定义View动
  6. Android8.0源码解析——Activity的启动过
  7. LisetView Item高度设置无效
  8. [android] Http Post 请求
  9. Android(安卓)对话框(三)自定义对话框
  10. Android(安卓)APP如何做开场渐变动画