美文网首页
自定义圆形图片控件View

自定义圆形图片控件View

作者: 对影成三人_bac5 | 来源:发表于2018-11-14 14:37 被阅读0次

    一、自定义类

    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"

      />

    相关文章

      网友评论

          本文标题:自定义圆形图片控件View

          本文链接:https://www.haomeiwen.com/subject/mhhjfqtx.html