zoukankan      html  css  js  c++  java
  • CircleImageView

    package com.cainiao5.cainiaoheadimg;

    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.drawable.BitmapDrawable;
    import android.util.AttributeSet;
    import android.widget.ImageView;

    /**
    * Created by Administrator on 2016/2/21 0021.
    */
    public class CircleImageView extends ImageView {


    // 设置外圈的宽度
    private int outCircleWidth;
    // 设置外圈的颜色
    private int outCircleColor ;

    private int viewWidth;
    private int viewHeight;

    private Bitmap image;
    private Paint paintBorder;//背景画笔


    public CircleImageView(Context context) {
    super(context);
    setup(context,null);
    }

    public CircleImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setup(context,attrs);
    }

    public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setup(context, attrs);
    }


    private void setup(Context context,AttributeSet attrs) {
    //2.获取属性
    if (null != attrs){
    TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.CircleImageView);

    int len = array.getIndexCount();
    for (int i = 0; i < len; i++) {
    int attr = array.getIndex(i);

    switch (attr){
    case R.styleable.CircleImageView_outCircleColor:
    this.outCircleColor = array.getColor(R.styleable.CircleImageView_outCircleColor,Color.WHITE);
    break;
    case R.styleable.CircleImageView_outCircleWigth:
    this.outCircleWidth = (int)array.getDimension(R.styleable.CircleImageView_outCircleWigth,5);
    break;
    default:

    break;
    }
    }
    }

    //初始化背景画笔
    paintBorder = new Paint();
    //设置背景颜色
    paintBorder.setColor(outCircleColor);
    //抗锯齿
    paintBorder.setAntiAlias(true);
    }
    //3.测量
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = measureWidth(widthMeasureSpec);
    int height = measureHeight(heightMeasureSpec);

    viewWidth = width - (outCircleWidth * 2);
    viewHeight = height -(outCircleWidth * 2);

    setMeasuredDimension(width,height);

    }

    private int measureHeight(int heightMeasureSpec) {
    int result = 0;
    int mode = MeasureSpec.getMode(heightMeasureSpec);
    int size = MeasureSpec.getSize(heightMeasureSpec);

    if (mode == MeasureSpec.EXACTLY){
    result = size;
    }else {
    result = viewHeight;
    }
    return result;
    }

    private int measureWidth(int widthMeasureSpec) {
    int result = 0;
    int mode = MeasureSpec.getMode(widthMeasureSpec);
    int size = MeasureSpec.getSize(widthMeasureSpec);

    if (mode == MeasureSpec.EXACTLY){
    result = size;
    }else {
    result = viewWidth;
    }


    return result;
    }

    // 设置底图颜色
    public void setBorderColor(int borderColor) {
    if (paintBorder != null)
    paintBorder.setColor(borderColor);

    this.invalidate();
    }

    // 设置外圈的宽度
    public void setBorderWidth(int outCircleWidth) {
    this.outCircleWidth = outCircleWidth;

    this.invalidate();
    }

    //4.测量

    @Override
    protected void onDraw(Canvas canvas) {
    //加载图片
    loadBitmap();

    if (image != null){
    int min = Math.min(viewWidth,viewHeight);

    int circleCenter = min/2;

    image = Bitmap.createScaledBitmap(image,min,min,false);

    canvas.drawCircle(circleCenter + outCircleWidth,circleCenter + outCircleWidth,circleCenter + outCircleWidth,paintBorder);

    canvas.drawBitmap(createCircleImage(image, min), outCircleWidth, outCircleWidth, null);
    }
    }

    private Bitmap createCircleImage(Bitmap source, int min) {

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    Bitmap target = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888);
    /**
    * 产生一个同样大小的画布
    */
    Canvas canvas = new Canvas(target);
    /**
    * 首先绘制圆形
    */
    canvas.drawCircle(min / 2, min / 2, min / 2, paint);
    /**
    * 使用SRC_IN,参考上面的说明
    */
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    /**
    * 绘制图片
    */
    canvas.drawBitmap(source, 0, 0, paint);
    return target;


    }

    private void loadBitmap() {
    BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();

    if (bitmapDrawable != null){
    image = bitmapDrawable.getBitmap();
    }
    }
    }
  • 相关阅读:
    Agile方法
    电子书下载:Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian
    电子书下载:Pro Oracle SQL
    电子书下载:Algorithms of the Intelligent Web
    BlogEngine .NET 日期控件显示问题
    电子书下载:Beginning JavaScript, 4th Edition
    电子书下载:Sams Teach Yourself iPhone Application Development in 24 Hours, 2nd Edition
    电子书下载:Pro ASP.NET 4 in VB 2010, 3rd Edition
    电子书下载:MCTS SelfPaced Training Kit (Exam 70515): Web Applications Development with Microsoft .NET Framework 4
    电子书下载:Unity 3D Game Development by Example: Beginner’s Guide
  • 原文地址:https://www.cnblogs.com/jeno-song/p/5884219.html
Copyright © 2011-2022 走看看