android把Glide不同大小的圖片切圓角和圓形

android 開(kāi)發(fā)程序員專(zhuān)題找一管理員,要求:長(zhǎng)期瀏覽簡(jiǎn)書(shū)并且是android開(kāi)發(fā)人員,有意者簡(jiǎn)信我?
需求Glide下載圖片并切圓角或圓形,但圖片有大有小,圖片不能改變,切圓還好說(shuō),但是切圓角就會(huì)發(fā)現(xiàn)圖片小的會(huì)比圖片大的要圓
搜一下 " Glide動(dòng)態(tài)加載圓形圖片跟圓角圖片 " 就會(huì)出現(xiàn)很多文章,但這些都不能解決上面的問(wèn)題 怎樣能 Glide動(dòng)態(tài)加載不同大小的圖片切圓形圖片跟圓角圖片呢?
解決很簡(jiǎn)單:既然是圖片大小不一致而導(dǎo)致圖片切出來(lái)不一樣,那就把圖片變的一樣大小不就可以嗎
申明一下我的代碼也是在Glide動(dòng)態(tài)加載圓形圖片跟圓角圖片搜出來(lái)的代碼基礎(chǔ)上修改的. 下面就是代碼了.

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"

    defaultConfig {
        applicationId "cn.xm.weidongjian.glidedemo"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.github.bumptech.glide:glide:3.6.1'
}

activity_main.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:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="正常圖片"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"/>

    <ImageView
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:id="@+id/imageView"
        android:scaleType="fitCenter"
        android:layout_below="@+id/button"
        android:layout_alignRight="@+id/button"
        android:layout_alignEnd="@+id/button"
        android:layout_marginTop="150dp"/>

    <ImageView
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:id="@+id/imageView2"
        android:scaleType="fitCenter"
        android:layout_below="@+id/imageView"
        android:layout_alignRight="@+id/imageView"
        android:layout_alignEnd="@+id/imageView"
        android:layout_marginTop="5dp"
        />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圓角圖片"
        android:id="@+id/button2"
        android:layout_below="@+id/button"
        android:layout_alignLeft="@+id/button"
        android:layout_alignRight="@+id/imageView"
        android:layout_alignEnd="@+id/imageView"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="大圓角圖片"
        android:id="@+id/button3"
        android:layout_below="@+id/button2"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignStart="@+id/button2"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圓形圖片"
        android:id="@+id/button4"
        android:layout_below="@+id/button3"
        android:layout_alignLeft="@+id/button"
        android:layout_alignRight="@+id/button3"
        android:layout_alignEnd="@+id/button3"/>
</RelativeLayout>

MainActivity

package cn.xm.weidongjian.glidedemo;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;

public class MainActivity extends AppCompatActivity implements OnClickListener {

    private ImageView imageView;
    private RequestManager glideRequest;
    private Context context = this;
    private ImageView imageView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        findViewById(R.id.button).setOnClickListener(this);
        findViewById(R.id.button2).setOnClickListener(this);
        findViewById(R.id.button3).setOnClickListener(this);
        findViewById(R.id.button4).setOnClickListener(this);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
        glideRequest = Glide.with(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1704146358.png").into(imageView);
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1716089900.png").into(imageView2);
                break;
            case R.id.button2:
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1704146358.png").transform(new GlideRoundTransform(context)).into(imageView);
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1716089900.png").transform(new GlideRoundTransform(context)).into(imageView2);
                break;
            case R.id.button3:
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1704146358.png").transform(new GlideRoundTransform(context, 7)).into(imageView);
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1716089900.png").transform(new GlideRoundTransform(context, 7)).into(imageView2);
                break;
            case R.id.button4:
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1704146358.png").transform(new GlideCircleTransform(context)).into(imageView);
                glideRequest.load("http://androidop.le890.com/hma/upload/2016/10/11/1716089900.png").transform(new GlideCircleTransform(context)).into(imageView2);
                break;
        }
    }
}

GlideCircleTransform

package cn.xm.weidongjian.glidedemo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;

public class GlideCircleTransform extends BitmapTransformation {
    public GlideCircleTransform(Context context) {
        super(context);
    }

    @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return circleCrop(pool, toTransform);
    }

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

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;
        // TODO this could be acquired from the pool too
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

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

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);
        return result;
    }

    @Override public String getId() {
        return getClass().getName();
    }
}

GlideRoundTransform

package cn.xm.weidongjian.glidedemo;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.Log;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;

public class GlideRoundTransform extends BitmapTransformation {

    private static float radius = 0f;

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

    public GlideRoundTransform(Context context, int dp) {
        super(context);
        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
    }

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

    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        Bitmap bitmap = changeBitmapSize(source);
        Bitmap result = pool.get(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_4444);
        if (result == null) {

            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            result = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_4444);
        }
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(bitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, bitmap.getWidth(), bitmap.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;
    }
    public static Bitmap changeBitmapSize(Bitmap bitmap) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        //設(shè)置想要的大小
        int newWidth=72;
        int newHeight=72;
        //計(jì)算壓縮的比率
        float scaleWidth=((float)newWidth)/width;
        float scaleHeight=((float)newHeight)/height;
        //獲取想要縮放的matrix
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth,scaleHeight);
        //獲取新的bitmap
        bitmap=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
        bitmap.getWidth();
        bitmap.getHeight();
        Log.e("newWidth","newWidth"+bitmap.getWidth());
        Log.e("newHeight","newHeight"+bitmap.getHeight());
        return bitmap;
    }

    @Override public String getId() {
        return getClass().getName() + Math.round(radius);
    }
}

很簡(jiǎn)單吧,就是用changeBitmapSize方法把圖片壓縮到72*72的這樣圖片都一樣大了,在切就不會(huì)出現(xiàn)切出來(lái)的圖片效果不一樣了

最后代碼(dome)地址: https://github.com/liang9/Imagedome

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末礁击,一起剝皮案震驚了整個(gè)濱河市柏肪,隨后出現(xiàn)的幾起案子姻檀,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驾胆,死亡現(xiàn)場(chǎng)離奇詭異渠啤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)惠爽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)癌蓖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人婚肆,你說(shuō)我怎么就攤上這事租副。” “怎么了较性?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵用僧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赞咙,道長(zhǎng)责循,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任攀操,我火速辦了婚禮院仿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘速和。我一直安慰自己歹垫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布颠放。 她就那樣靜靜地躺著排惨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碰凶。 梳的紋絲不亂的頭發(fā)上暮芭,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音痒留,去河邊找鬼谴麦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伸头,可吹牛的內(nèi)容都是我干的匾效。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恤磷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼面哼!你這毒婦竟也來(lái)了野宜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤魔策,失蹤者是張志新(化名)和其女友劉穎匈子,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體闯袒,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虎敦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了政敢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片其徙。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喷户,靈堂內(nèi)的尸體忽然破棺而出唾那,到底是詐尸還是另有隱情,我是刑警寧澤褪尝,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布闹获,位于F島的核電站,受9級(jí)特大地震影響河哑,放射性物質(zhì)發(fā)生泄漏避诽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一灾馒、第九天 我趴在偏房一處隱蔽的房頂上張望茎用。 院中可真熱鬧,春花似錦睬罗、人聲如沸轨功。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)古涧。三九已至,卻和暖如春花盐,著一層夾襖步出監(jiān)牢的瞬間羡滑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工算芯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柒昏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓熙揍,卻偏偏與公主長(zhǎng)得像职祷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,721評(píng)論 22 665
  • 一有梆、簡(jiǎn)介 在泰國(guó)舉行的谷歌開(kāi)發(fā)者論壇上是尖,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫(kù),作者是bumptech泥耀。這...
    天天大保建閱讀 7,459評(píng)論 2 28
  • “你有夢(mèng)想嗎痰催?” “有岸荡恰!” “可是我卻在老去.....” 出來(lái)實(shí)習(xí)快半年了額夸溶,似乎學(xué)會(huì)了許多雜七雜八的東西弦疮,但是...
    小潔大潔閱讀 205評(píng)論 0 0
  • 到了這個(gè)階段人就是很容易多想 覺(jué)得未來(lái)很渺茫 不知道干什么 怕對(duì)不起自己又怕耽誤對(duì)方 很多畢業(yè)就分手的人大概都是這...
    uaremybelief閱讀 189評(píng)論 0 0