圖文講解Android的ImageView類中的ScaleType屬性設(shè)置
ScaleType設(shè)置圖解
圖文相配很清晰的看出每個(gè)屬性的效果,
感覺(jué) CENTER_CROP 比較有用,長(zhǎng)寬自動(dòng)適應(yīng) ImageView ,整個(gè)圖片自動(dòng)縮略填充整個(gè)區(qū)域且居中顯示(高寬不一定是view的尺寸),以前用JS在網(wǎng)頁(yè)上實(shí)現(xiàn)的,在
android上一開(kāi)始還在想要用java來(lái)自己實(shí)現(xiàn)這個(gè)效果太麻煩了,沒(méi)想到系統(tǒng)自帶方便多了
ImageView的Scaletype決定了圖片在View上顯示時(shí)的樣子,如進(jìn)行何種比例的縮放,及顯示圖片的整體還是部分,等等。
設(shè)置的方式包括:
1. 在layout xml中定義android:scaleType="CENTER"
2. 或在代碼中調(diào)用imageView.setScaleType(ImageView.ScaleType.CENTER);
接下來(lái),將對(duì)ScaleType的值和對(duì)應(yīng)的顯示效果用最直觀的方式——真圖演示的方法,來(lái)進(jìn)行說(shuō)明。
首先,是測(cè)試使用的原始圖片:
(Dimensions: 128 * 128)
(Dimensions: 640 * 428)
好,開(kāi)始下面的測(cè)試:
1.
SetScaleType(ImageView.ScaleType.CENTER);
按圖片的原來(lái)size居中顯示,當(dāng)圖片長(zhǎng)/寬超過(guò)View的長(zhǎng)/寬,則截取圖片的居中部分顯示
2.
SetScaleType(ImageView.ScaleType.CENTER_CROP);
按比例擴(kuò)大圖片的size居中顯示,使得圖片長(zhǎng)(寬)等于或大于View的長(zhǎng)(寬)
3.
setScaleType(ImageView.ScaleType.CENTER_INSIDE);
將圖片的內(nèi)容完整居中顯示,通過(guò)按比例縮小或原來(lái)的size使得圖片長(zhǎng)/寬等于或小于View的長(zhǎng)/寬
4.
setScaleType(ImageView.ScaleType.FIT_CENTER);
把圖片按比例擴(kuò)大/縮小到View的寬度,居中顯示
5. FIT_START, FIT_END在圖片縮放效果上與FIT_CENTER一樣,只是顯示的位置不同,F(xiàn)IT_START是置于頂部,F(xiàn)IT_CENTER居中,F(xiàn)IT_END置于底部。
在此就不給出示例了。
6. FIT_XY
不按比例縮放圖片,目標(biāo)是把圖片塞滿整個(gè)View。
實(shí)現(xiàn)圖片寬度100%ImageView寬度且高度按比例自動(dòng)伸縮
在ListView中為了實(shí)現(xiàn)圖片寬度100%適應(yīng)ImageView容器寬度,讓高度自動(dòng)按比例伸縮功能,查了很多資料,搞了一下午都沒(méi)找出個(gè)現(xiàn)成的辦法,不過(guò)貌似有個(gè)結(jié)論了,就是:
Android自身不能實(shí)現(xiàn)這樣的效果,只有自己動(dòng)手豐衣足食
使用scaleType 屬性,設(shè)置圖片在 view 中的縮放方式,本來(lái)以為 fit_center 可以實(shí)現(xiàn),結(jié)果很無(wú)語(yǔ),莫名其妙,沒(méi)能實(shí)現(xiàn)寬度貼合容器寬度,兩側(cè)都是空白區(qū)域。
解決方法:
1. 還是要利用 scaleType 的 center_crop 效果,讓圖片能始終按比例填充容器,不留空白區(qū)域。
2. 剩下最主要的功能就是動(dòng)態(tài)設(shè)置 ImageView 容器的高度了,這樣讓圖片能盡可能的完整展現(xiàn)出來(lái),而且還可以實(shí)現(xiàn) maxHeight 的效果,如果圖片高度比例過(guò)大不至于把列表拉的太長(zhǎng)。
int maxHeight = ZUI.dp2px(mContext, 300); int height = (int) ((float) view.getWidth()/drawable.getMinimumWidth() * drawable.getMinimumHeight()); if (height > maxHeight) height = maxHeight; view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));
其中 view 即 ImageView 圖片視圖容器對(duì)象,drawable 就是要顯示的圖片資源。
drawable.getMinimumWidth() 和 drawable.getMinimumHeight() 是獲取圖片在屏幕上的可視高度寬度,不一定是圖片的原始高寬度,跟屏幕的像素密度有關(guān),大概就是這樣子的吧。注意要用浮點(diǎn)數(shù)值類型,不然可能取整變成 1 的倍數(shù)了。
將 dp 值轉(zhuǎn)為像素值,因?yàn)?java 代碼中操作的高寬都是像素值,而樣式中都是用 dip 來(lái)兼容屏幕的
public static int dp2px(Context context, int dp) { float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); }
ok 大概就是這樣搞定了,順便弄個(gè)測(cè)試結(jié)果圖
其實(shí) center_crop 可以簡(jiǎn)單的實(shí)現(xiàn)該功能的,但是他不會(huì)自動(dòng)擴(kuò)展高度,他應(yīng)該用的是圖片的可視高度為容器高度然后再進(jìn)行容器覆蓋顯示,也就是說(shuō)容器高度不會(huì)按比例增大,導(dǎo)致圖片幾乎只顯示一半不到的樣子,如果圖片比較小,那幾乎沒(méi)辦法用了,還是必須要?jiǎng)討B(tài)調(diào)整,如果圖片尺寸比較大,特別是高度合適的話就可以直接用的
相關(guān)文章
Android中搜索圖標(biāo)和文字居中的EditText實(shí)例
本篇文章主要介紹了Android中搜索圖標(biāo)和文字居中的EditText實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-06-06Android實(shí)現(xiàn)仿微軟系統(tǒng)加載動(dòng)畫效果
這篇文章主要介紹了Android實(shí)現(xiàn)仿微軟系統(tǒng)加載動(dòng)畫效果的方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04Android自定義實(shí)現(xiàn)淘寶下拉刷新效果
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)淘寶下拉刷新效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android開(kāi)發(fā)Compose框架使用開(kāi)篇
這篇文章主要為大家介紹了Android開(kāi)發(fā)Compose框架使用開(kāi)篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android自定義textview實(shí)現(xiàn)豎直滾動(dòng)跑馬燈效果
這篇文章主要為大家詳細(xì)介紹了Android自定義textview實(shí)現(xiàn)豎直滾動(dòng)跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06刷新Activity中的scrollview示例(局部ui刷新)
代碼很簡(jiǎn)單,但是很實(shí)用,適合在一個(gè)Activity中要刷新局部的UI,比如在掃描一維碼的時(shí)候,要把每次掃描的結(jié)果都顯示在界面上2014-01-01深入分析Android ViewStub的應(yīng)用詳解
本篇文章是對(duì)Android ViewStub的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05ListView實(shí)現(xiàn)頂部和底部?jī)?nèi)容指示器的方法
這篇文章主要介紹了ListView實(shí)現(xiàn)頂部和底部?jī)?nèi)容指示器的方法,需要的朋友可以參考下2015-09-09Android實(shí)現(xiàn)的秒表計(jì)時(shí)器示例
這篇文章主要介紹了Android實(shí)現(xiàn)的秒表計(jì)時(shí)器,結(jié)合完整實(shí)例形式分析了Android計(jì)時(shí)器的具體實(shí)現(xiàn)步驟與相關(guān)技巧,涉及Android針對(duì)日期與時(shí)間的操作方法,需要的朋友可以參考下2016-08-08