Android自定義ImageView實現圓形圖片

自定義ImageView實現圓形圖片,主要是在onDraw()方法中實現繪製圓形圖片,在onMeasure()中測量圓形的半徑並設置View的寬高。效果以下圖android

代碼以下canvas

public class CircleImageView extends ImageView {ide

    //畫筆
    private Paint mPaint;
    //圓形圖片的半徑
    private int mRadius;
    //圖片的宿放比例
    private float mScale;佈局

    public CircleImageView(Context context) {
        super(context);
    }.net

    public CircleImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }xml

    public CircleImageView(Context context, @Nullable 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);
    }blog

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {圖片

        mPaint = new Paint();get

        Drawable drawable = getDrawable();

        if (null != drawable) {
            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

        //初始化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);
        } else {
            super.onDraw(canvas);
        }
    }

}
自定義好以後,就能夠直接在xml佈局中使用該控件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context="com.sun.zh.bezier.MainActivity">
    <com.sun.zh.bezier.view.CircleImageView
        android:id="@+id/image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_timg" />
</RelativeLayout>

注意必須設置src圖,設置background圖不會出現圓形效果

在ImageView中src與background的區別:

background會根據ImageView組件給定的長寬進行拉伸,而src就存放的是原圖的大小,不會進行拉伸。src是圖片內容(前景),bg是背景,能夠同時使用。此外scaleType只是對src起做用,bg可設置透明度。在動態加載圖片中設置src可以使用image.setImageResource(R.drawable.**)。 ———————————————— 版權聲明:本文爲CSDN博主「孫中華」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/RockyHua/article/details/79416085

相關文章
相關標籤/搜索