自定义圆形图片控件View

一、自定义类

public class CircleImageView extends ImageView {

    private Paint mPaint; //画笔

    private int mRadius; //圆形图片的半径

    private float mScale; //图片的缩放比例

    public CircleImageView(Context context) {

        super(context);

    }

    public CircleImageView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {

        super(context, attrs, defStyleAttr);

    }

    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //因为是圆形图片,所以应该让宽高保持一致

        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());

        mRadius = size / 2;

        setMeasuredDimension(size, size);

    }

    @Override

    protected void onDraw(Canvas canvas) {

        mPaint = new Paint();

        Bitmap bitmap = drawableToBitmap(getDrawable());

        //初始化BitmapShader,传入bitmap对象

        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

        //计算缩放比例

        mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());

        Matrix matrix = new Matrix();

        matrix.setScale(mScale, mScale);

        bitmapShader.setLocalMatrix(matrix);

        mPaint.setShader(bitmapShader);

        //画圆形,指定好中心点坐标、半径、画笔

        canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);

    }

    //写一个drawble转BitMap的方法

    private Bitmap drawableToBitmap(Drawable drawable) {

        if (drawable instanceof BitmapDrawable) {

            BitmapDrawable bd = (BitmapDrawable) drawable;

            return bd.getBitmap();

        }

        int w = drawable.getIntrinsicWidth();

        int h = drawable.getIntrinsicHeight();

        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(bitmap);

        drawable.setBounds(0, 0, w, h);

        drawable.draw(canvas);

        return bitmap;

    }

}

二、布局引用

        android:id="@+id/image1"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_centerInParent="true"

        android:scaleType="centerCrop"

        android:src="@drawable/gangtiexia"

  />

你可能感兴趣的:(自定义圆形图片控件View)