Glide的override方法和View的setLayoutParams方法設(shè)置圖片寬高對(duì)比

用了很久的Glide澜躺,最近在使用Glide3時(shí)突然想到一個(gè)問題酷窥,大家都知道使用Glide的override方法可以重寫圖片大小。而View的setLayoutParams則可以設(shè)置ImageView的大小。代碼如下:

//Glide的override()方法設(shè)置圖片大小
Glide.with(this).load(R.mipmap.mantou).override(500, 500).into(imageView5);

//View的setLayoutParams設(shè)置ImageView大小
LinearLayout.LayoutParams params1 = (LinearLayout.LayoutParams) imageView6.getLayoutParams();
params1.width = 100;
params1.height = 100;
imageView6.setLayoutParams(params1);

那么這兩者在使用時(shí)有什么相似和區(qū)別呢别瞭?帶著這樣的疑問,我開始嘗試探索兩者間的區(qū)別只冻。

布局文件很簡單庇麦,使用NestedScrollView包裹LinearLayout布局,在LinearLayout布局中放入ImageView比較喜德,就不貼了山橄,所有的ImageView的寬高都使用wrap_content來設(shè)置的。

測試一:第一列使用override設(shè)置圖片住诸,第二列使用setLayoutParams

先看看設(shè)置后的效果:

測試一.png

可以看到驾胆,看起來幾乎沒有區(qū)別,ImageView的大小和圖片的分辨率看起來都是一模一樣的贱呐。

來看一下代碼丧诺,都設(shè)置了同樣的寬高:

//設(shè)置第一列圖片
Glide.with(this).load(R.mipmap.mantou).override(100, 100).into(imageView1);
Glide.with(this).load(R.mipmap.mantou).override(200, 200).into(imageView2);
Glide.with(this).load(R.mipmap.mantou).override(300, 300).into(imageView3);
Glide.with(this).load(R.mipmap.mantou).override(400, 400).into(imageView4);
Glide.with(this).load(R.mipmap.mantou).override(500, 500).into(imageView5);

//設(shè)置第二列圖片
LinearLayout.LayoutParams params1 = (LinearLayout.LayoutParams) imageView6.getLayoutParams();
params1.width = 100;
params1.height = 100;
imageView6.setLayoutParams(params1);

LinearLayout.LayoutParams params2 = (LinearLayout.LayoutParams) imageView7.getLayoutParams();
params2.width = 200;
params2.height = 200;
imageView7.setLayoutParams(params2);

LinearLayout.LayoutParams params3 = (LinearLayout.LayoutParams) imageView8.getLayoutParams();
params3.width = 300;
params3.height = 300;
imageView8.setLayoutParams(params3);

LinearLayout.LayoutParams params4 = (LinearLayout.LayoutParams) imageView9.getLayoutParams();
params4.width = 400;
params4.height = 400;
imageView9.setLayoutParams(params4);

LinearLayout.LayoutParams params5 = (LinearLayout.LayoutParams) imageView10.getLayoutParams();
params5.width = 500;
params5.height = 500;
imageView10.setLayoutParams(params5);

但實(shí)際情況真的是像我們?nèi)庋鬯吹降膯幔课依^續(xù)帶著疑問奄薇,做了測試2驳阎。

測試二:給圖片添加背景顏色

也就是在xml文件中給2個(gè)ImageView都設(shè)置了一個(gè)background顏色。

測試2.png

代碼如下:

private void test2() {
    Glide.with(this).load(R.mipmap.mantou).override(400, 400).into(imageView11);

    LinearLayout.LayoutParams params12 = (LinearLayout.LayoutParams) imageView12.getLayoutParams();
    params12.width = 400;
    params12.height = 400;
    imageView12.setLayoutParams(params12);
}

明顯看出2個(gè)ImageView的大小是不同的馁蒂,打印他們的寬高如下:

2019-03-31 11:05:58.555 6705-6705/com.heyzqt.staggeredgridviewdemo I/hello: test2: imageview11 width = 311,imageview11 height = 400
2019-03-31 11:05:54.620 6705-6705/com.heyzqt.staggeredgridviewdemo I/hello: test2: imageView12 width = 400,imageView12 height = 400

結(jié)合現(xiàn)象分析呵晚,當(dāng)使用setLayoutParams設(shè)置ImageView寬高為400x400時(shí),ImageView被設(shè)置成指定大小沫屡,因?yàn)镮mageView默認(rèn)的scaleType為fitCenter饵隙,所以圖片被等比例縮放顯示在了ImageView居中位置。

當(dāng)使用override設(shè)置圖片大小為400x400時(shí)沮脖,打印出ImageView的寬高為311x400金矛,因?yàn)镚lide默認(rèn)設(shè)置圖片的scaleType也是fitCenter。那么猜測應(yīng)該是Glide根據(jù)fitCenter的標(biāo)準(zhǔn)來等比例設(shè)置了圖片的大小勺届,而ImageView寬高是wrap_content驶俊,所以當(dāng)圖片大小確定后,ImageView的大小就是圖片大小免姿。

帶著這種猜想給左側(cè)圖片添加了centerCrop();

Glide.with(this).load(R.mipmap.mantou).override(400, 400).centerCrop().into(imageView11);

顯示如下:

添加centerCrop.png

寬高打印信息

2019-03-31 11:40:05.625 7118-7118/com.heyzqt.staggeredgridviewdemo I/hello: test2: imageview11 width = 400,imageview11 height = 400
2019-03-31 11:40:01.740 7118-7118/com.heyzqt.staggeredgridviewdemo I/hello: test2: imageView12 width = 400,imageView12 height = 400

左側(cè)通過override重寫大小的圖片寬高變成了400x400饼酿,那么說明上面我的猜想是正確的,確實(shí)跟scaleType的值有關(guān)胚膊。

了解清楚了上面的知識(shí)點(diǎn)故俐,我又產(chǎn)生了新的想法,當(dāng)override和setLayoutparams同時(shí)設(shè)置在一張圖片上時(shí)紊婉,又會(huì)是什么樣的效果呢药版?帶著這樣的疑問,我又做了第3個(gè)測試肩榕。

測試三:同時(shí)使用override和setLayoutParams設(shè)置一張圖片

先看下代碼:

private void test3() {
    //override(10,10)
    LinearLayout.LayoutParams params13 = (LinearLayout.LayoutParams) imageView13.getLayoutParams();
    params13.width = 400;
    params13.height = 400;
    imageView13.setLayoutParams(params13);
    Glide.with(this).load(R.mipmap.mantou).override(10, 10).into(imageView13);

    //override(400,400)
    Glide.with(this).load(R.mipmap.mantou).override(400, 400).into(imageView14);
    LinearLayout.LayoutParams params14 = (LinearLayout.LayoutParams) imageView14.getLayoutParams();
    params14.width = 400;
    params14.height = 400;
    imageView14.setLayoutParams(params14);
}

注意上下兩端代碼的相同點(diǎn)和區(qū)別

相同點(diǎn):

  • 都使用了override()和setLayoutParams()方法來設(shè)置圖片刚陡。
  • setLayoutParams方法設(shè)置的寬高都是相同的400x400

區(qū)別:

  • 左側(cè)圖片override(10,10)惩妇,右側(cè)圖片override(400,400)
  • 左側(cè)圖片setLayoutParams方法在前,override方法在后筐乳,右側(cè)圖片override方法在前歌殃,setLayoutParams方法在后

了解清相似和區(qū)別后,來看一下實(shí)際效果圖蝙云。

測試3.png

再看一下打印信息:

2019-03-31 11:59:36.344 7480-7480/com.heyzqt.staggeredgridviewdemo I/hello: test3: imageView13 width = 400,imageView13 height = 400
2019-03-31 11:59:36.344 7480-7480/com.heyzqt.staggeredgridviewdemo I/hello: test3: imageView14 width = 400,imageView14 height = 400

從打印信息可以知道氓皱,不管Glide和setLayoutParams順序,ImageView最終都是以setLayoutParams設(shè)置的寬高為準(zhǔn)勃刨,所以兩張圖的ImageView的大小一樣波材,都是400x400。

但是前者很糊身隐,后者則清晰很多廷区,對(duì)比代碼應(yīng)該是override設(shè)置了圖片大小的原因。左邊將圖片大小設(shè)置為10x10(根據(jù)fitcenter放大居中)贾铝,然后再將10x10的圖設(shè)置到400x400的ImageView中隙轻,所以圖片糊掉了,而右邊的圖則在override設(shè)置為400x400的情況下就清晰很多垢揩。

如果對(duì)你有幫助的話玖绿,點(diǎn)贊、評(píng)論叁巨、贊賞都是對(duì)我的鼓勵(lì)斑匪,也是支持我寫下去的動(dòng)力,謝謝锋勺!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚀瘸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宙刘,更是在濱河造成了極大的恐慌苍姜,老刑警劉巖牢酵,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬包,死亡現(xiàn)場離奇詭異,居然都是意外死亡馍乙,警方通過查閱死者的電腦和手機(jī)布近,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丝格,“玉大人撑瞧,你說我怎么就攤上這事∠则颍” “怎么了预伺?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵订咸,是天一觀的道長。 經(jīng)常有香客問我酬诀,道長脏嚷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任瞒御,我火速辦了婚禮父叙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肴裙。我一直安慰自己趾唱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布蜻懦。 她就那樣靜靜地躺著甜癞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛乃。 梳的紋絲不亂的頭發(fā)上带欢,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音烤惊,去河邊找鬼乔煞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柒室,可吹牛的內(nèi)容都是我干的渡贾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雄右,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼空骚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起擂仍,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤囤屹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逢渔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋坚,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年肃廓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了智厌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盲赊,死狀恐怖铣鹏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哀蘑,我是刑警寧澤诚卸,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布葵第,位于F島的核電站,受9級(jí)特大地震影響合溺,放射性物質(zhì)發(fā)生泄漏羹幸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一辫愉、第九天 我趴在偏房一處隱蔽的房頂上張望栅受。 院中可真熱鬧,春花似錦恭朗、人聲如沸屏镊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽而芥。三九已至,卻和暖如春膀值,著一層夾襖步出監(jiān)牢的瞬間棍丐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工沧踏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歌逢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓翘狱,卻偏偏與公主長得像秘案,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潦匈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354