自定义圆形图片控件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;

    }

}

二、布局引用

<mgzxc.cn.module2.CircleImageView

        android:id="@+id/image1"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_centerInParent="true"

        android:scaleType="centerCrop"

        android:src="@drawable/gangtiexia"

  />

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容