Glide圓角盹沈、圓角帶邊框

轉(zhuǎn)換器

package com.twl.qichechaoren_business.librarypublic.utils.glide;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.text.TextUtils;

import androidx.annotation.NonNull;

import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;

import java.security.MessageDigest;


/**
 * 注釋:Glide圓角轉(zhuǎn)換器
 * 時間:2021/8/6 0006 9:39
 * 作者:郭翰林
 */
public class GlideRoundTransform extends CenterCrop {

    private static float mRadius = 0f;
    private static float mBorderWidth = 0f;
    private static String mBorderColor;

    public GlideRoundTransform(Context context) {
        this(context, 4);
    }

    /**
     * 注釋:圓角
     * 時間:2021/9/23 0023 18:00
     * 作者:郭翰林
     *
     * @param context
     * @param radius
     */
    public GlideRoundTransform(Context context, int radius) {
        mRadius = Resources.getSystem().getDisplayMetrics().density * radius;
    }

    /**
     * 圓角帶邊框
     *
     * @param context
     * @param radius
     * @param borderColor
     * @param borderWidth
     */
    public GlideRoundTransform(Context context, int radius, String borderColor, int borderWidth) {
        mRadius = Resources.getSystem().getDisplayMetrics().density * radius;
        mBorderColor = borderColor;
        mBorderWidth = Resources.getSystem().getDisplayMetrics().density * borderWidth;
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        Bitmap transform = super.transform(pool, toTransform, outWidth, outHeight);
        return roundCrop(pool, transform);
    }

    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        if (!TextUtils.isEmpty(mBorderColor)) {
            //繪制圓角帶邊框
            Paint borderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//設置邊框樣式
            borderPaint.setColor(Color.parseColor(mBorderColor));
            borderPaint.setStyle(Paint.Style.STROKE);
            borderPaint.setStrokeWidth(mBorderWidth);
            drawRoundRect(canvas, paint, source.getWidth(), source.getHeight(), borderPaint);
        } else {
            //繪制圓角
            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
            canvas.drawRoundRect(rectF, mRadius, mRadius, paint);
        }

        return result;
    }

    /**
     * 注釋:繪制邊框
     * 時間:2021/9/23 0023 18:20
     * 作者:郭翰林
     *
     * @param canvas
     * @param paint
     * @param width
     * @param height
     * @param borderPaint
     */
    private static void drawRoundRect(Canvas canvas, Paint paint, float width, float height, Paint borderPaint) {
        float right = width;
        float bottom = height;
        float halfBorder = mBorderWidth / 2;
        Path path = new Path();
        float[] pos = new float[8];
        int shift = 0b1111;
        int index = 3;
        while (index >= 0) {//設置四個邊角的弧度半徑
            pos[2 * index + 1] = ((shift & 1) > 0) ? mRadius : 0;
            pos[2 * index] = ((shift & 1) > 0) ? mRadius : 0;
            shift = shift >> 1;
            index--;
        }
        path.addRoundRect(new RectF(halfBorder, halfBorder, right - halfBorder, bottom - halfBorder),
                pos
                , Path.Direction.CW);
        canvas.drawPath(path, paint);//繪制要加載的圖形
        canvas.drawPath(path, borderPaint);//繪制邊框
    }

    @Override
    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {

    }
}

使用方法

    /**
     * 注釋:顯示帶圓角的圖片
     * 時間:2021/8/6 0006 9:41
     * 作者:郭翰林
     *
     * @param context
     * @param url
     * @param image
     * @param radius
     */
    public static void loadImage(Context context, String url, ImageView image, int radius) {
        RequestOptions requestOptions = new RequestOptions()
                .placeholder(R.mipmap.load_image)
                .error(R.mipmap.load_image)
                .transform(new GlideRoundTransform(context, radius))
                .dontAnimate();
        Glide.with(context).load(url).apply(requestOptions).into(image);
    }

    /**
     * 注釋:圓角帶邊框
     * 時間:2021/9/23 0023 18:26
     * 作者:郭翰林
     *
     * @param context
     * @param url
     * @param image
     * @param radius
     * @param borderColor
     * @param borderWidth
     */
    public static void loadImage(Context context, String url, ImageView image, int radius, String borderColor, int borderWidth) {
        RequestOptions requestOptions = new RequestOptions()
                .placeholder(R.mipmap.load_image)
                .error(R.mipmap.load_image)
                .transform(new GlideRoundTransform(context, radius, borderColor, borderWidth))
                .dontAnimate();
        Glide.with(context).load(url).apply(requestOptions).into(image);
    }
 //圓角20dp
 GlideUtils.loadImage(context, uri, live_preview_image, 20)
//圓角20dp法绵,邊框1dp顏色白色
 GlideUtils.loadImage(context, uri, live_preview_image, 20, "#ffffff", 1)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秧骑,一起剝皮案震驚了整個濱河市渣淤,隨后出現(xiàn)的幾起案子均抽,更是在濱河造成了極大的恐慌,老刑警劉巖取具,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脖隶,死亡現(xiàn)場離奇詭異,居然都是意外死亡暇检,警方通過查閱死者的電腦和手機产阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來占哟,“玉大人心墅,你說我怎么就攤上這事≌ズ酰” “怎么了怎燥?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜜暑。 經(jīng)常有香客問我铐姚,道長,這世上最難降的妖魔是什么肛捍? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任隐绵,我火速辦了婚禮,結(jié)果婚禮上拙毫,老公的妹妹穿的比我還像新娘依许。我一直安慰自己,他們只是感情好缀蹄,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布峭跳。 她就那樣靜靜地躺著膘婶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛀醉。 梳的紋絲不亂的頭發(fā)上悬襟,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音拯刁,去河邊找鬼脊岳。 笑死,一個胖子當著我的面吹牛垛玻,可吹牛的內(nèi)容都是我干的割捅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夭谤,長吁一口氣:“原來是場噩夢啊……” “哼棺牧!你這毒婦竟也來了巫糙?” 一聲冷哼從身側(cè)響起朗儒,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎参淹,沒想到半個月后醉锄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡浙值,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年恳不,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开呐。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烟勋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筐付,到底是詐尸還是另有隱情卵惦,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布瓦戚,位于F島的核電站沮尿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏较解。R本人自食惡果不足惜畜疾,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望印衔。 院中可真熱鬧啡捶,春花似錦、人聲如沸奸焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至金顿,卻和暖如春臊泌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揍拆。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工渠概, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫂拴。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓播揪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筒狠。 傳聞我的和親對象是個殘疾皇子猪狈,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容