天天看點

Android實作圖檔寬度100%ImageView寬度且高度按比例自動伸縮

在listview中為了實作圖檔寬度100%适應imageview容器寬度,讓高度自動按比例伸縮功能,查了很多資料,搞了一下午都沒找出個現成的辦法,不過貌似有個結論了,就是:

android自身不能實作這樣的效果,隻有自己動手豐衣足食

imageview 中有個 scaletype 屬性,設定圖檔在 view 中的縮放方式,本來以為 fit_center 可以實作,結果很無語,莫名其妙,沒能實作寬度貼合容器寬度,兩側都是空白區域。

imageview.scaletype設定圖解

解決方法:

1.  還是要利用 scaletype 的  center_crop 效果,讓圖檔能始終按比例填充容器,不留白白區域。

2.  剩下最主要的功能就是動态設定 imageview 容器的高度了,這樣讓圖檔能盡可能的完整展現出來,而且還可以實作 maxheight 的效果,如果圖檔高度比例過大不至于把清單拉的太長。

其中 view 即 imageview 圖檔視圖容器對象,drawable 就是要顯示的圖檔資源。

drawable.getminimumwidth()  和 drawable.getminimumheight() 是擷取圖檔在螢幕上的可視高度寬度,不一定是圖檔的原始高寬度,跟螢幕的像素密度有關,大概就是這樣子的吧。注意要用浮點數值類型,不然可能取整變成 1 的倍數了。

将 dp 值轉為像素值,因為 java 代碼中操作的高寬都是像素值,而樣式中都是用 dip 來相容螢幕的

ok 大概就是這樣搞定了,順便弄個測試結果圖

Android實作圖檔寬度100%ImageView寬度且高度按比例自動伸縮

其實 center_crop  可以簡單的實作該功能的,但是他不會自動擴充高度,他應該用的是圖檔的可視高度為容器高度然後再進行容器覆寫顯示,也就是說容器高度不會按比例增大,導緻圖檔幾乎隻顯示一半不到的樣子,如果圖檔比較小,那幾乎沒辦法用了,還是必須要動态調整,如果圖檔尺寸比較大,特别是高度合适的話就可以直接用的

繼續閱讀