Android ImageView ScaleType 可視指南

如果你像我一樣湃窍,你真的闻蛀,非常,非常好看您市。 但你也可能有點(diǎn)健忘觉痛。 因此,當(dāng)需要在ImageView中縮放圖像時(shí)茵休,你可能已經(jīng)忘記不同的ScaleType顯示在屏幕上具體是什么樣子薪棒。 因此手蝎,您需要在接下來(lái)的10-15分鐘內(nèi)構(gòu)建并使用每種比例類(lèi)型重建您的應(yīng)用,以查看它們的外觀盗尸。 然后你不可避免地忘記了其中兩個(gè)之間的區(qū)別柑船,并重新開(kāi)始整個(gè)過(guò)程帽撑。 正如孩子們所說(shuō)泼各,“我得到了”。以下并排放置了所有不同ScaleType 的屏幕截圖亏拉。 所有的ScaleType 定義都是直接從Android官網(wǎng)文檔復(fù)制過(guò)來(lái)的扣蜻。 更為重要的是,對(duì)于勇于探索的你來(lái)說(shuō)及塘,這是一個(gè)有用的提示莽使,他們?cè)谶@篇文章的結(jié)尾。

image


Scale Types

完整的關(guān)于 Scale Types的介紹請(qǐng)看Android 官方文檔


不同的 Scale Types 介紹

一:CENTER

將圖像置于視圖中心笙僚,但不縮放

二:CENTER_CROP

Scale the image uniformly (maintain the image’s aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding).

均勻縮放圖像(保持圖像的縱橫比)芳肌,使圖像的尺寸(寬度和高度)等于或大于視圖的相應(yīng)尺寸(減去填充)。

三:CENTER_INSIDE

Scale the image uniformly (maintain the image’s aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the
view (minus padding).


均勻縮放圖像(保持圖像的縱橫比)肋层,使圖像的尺寸(寬度和高度)等于或小于視圖的相應(yīng)尺寸(減去填充)

四:FIT_CENTER

對(duì)圖片執(zhí)行 Matrix.ScaleToFit.CENTER 縮放

Matrix.ScaleToFit.CENTER: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. The result is centered inside dst.


保持原圖比例不變的情況下亿笤,計(jì)算出一個(gè)縮放比例,讓縮放后的圖片能完整顯示在容器內(nèi)(一般為view)并且至少保證一個(gè)邊(長(zhǎng)或?qū)挘┖腿萜鳎?code>view) 完全重合栋猖,縮放后的圖形置于視圖中心净薛。

五:FIT_END

對(duì)圖片執(zhí)行 Matrix.ScaleToFit.END縮放

Matrix.ScaleToFit.END: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. END aligns the result to the right and bottom edges of dst.


保持原圖比例不變的情況下,計(jì)算出一個(gè)縮放比例蒲拉,讓縮放后的圖片能完整顯示在容器內(nèi)(一般為view)并且至少保證一個(gè)邊(長(zhǎng)或?qū)挘┖腿萜鳎?code>view) 完全重合肃拜,縮放后的圖形置于容器右下方。

六:FIT_START

對(duì)圖片執(zhí)行 Matrix.ScaleToFit.START 縮放

Matrix.ScaleToFit.START: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. START aligns the result to the left and top edges of dst.


保持原圖比例不變的情況下雌团,計(jì)算出一個(gè)縮放比例燃领,讓縮放后的圖片能完整顯示在容器內(nèi)(一般為view)并且至少保證一個(gè)邊(長(zhǎng)或?qū)挘┖腿萜鳎?code>view) 完全重合,縮放后的圖形和容器保持左上對(duì)齊

七:FIT_XY

對(duì)圖片執(zhí)行 Matrix.ScaleToFit.FILL 縮放

Matrix.ScaleToFit.FILL: Scale in X and Y independently, so that src matches dst exactly. This may change the aspect ratio of the src.


對(duì) X 和 Y 軸獨(dú)立縮放锦援,以準(zhǔn)確的適應(yīng)容器猛蔽。很可能會(huì)改變圖片的原始比例

八:MATRIX

Scale using the image matrix when drawing.

使用矩陣縮放圖片


  1. ImageView.ScaleType.MATRIX lets you use a Matrix to scale the image. You can set the Matrix using ImageView.setImageMatrix(matrix). So by declaring the scaleType to MATRIX you are saying that you want to use an explicit Matrix to do that.
  2. You can use imageView.setScaleType(ImageView.ScaleType.MATRIX) whenever you want to customize the way the your image scales, rotates, etc. at your desire.
  1. FIT_END and FIT_START are default types of scale. So, if you use FIT_END for instance, your image will maintain the original aspect ratio and it will align the result of the right and bottom edges of your image view. So basically, the difference is that FIT_END and FIT_START are "presets" while with MATRIX you declare that you want to use your own matrix to scale.

  1. 允許使用矩陣(matrix)縮放圖片,可以使用ImageView.setImageMatrix(matrix)設(shè)置matrix,所以申明 scaleTypeMATRIX 時(shí)雨涛,則表示你想通過(guò)設(shè)置一個(gè)確定的矩陣(MAXTRIX)來(lái)設(shè)置縮放枢舶。

  2. 您可以隨時(shí)使用imageview.setscaleType(imageview.scaleType.matrix)的方式,根據(jù)需要自定義圖像縮放替久、旋轉(zhuǎn)等方式

  3. fit_endfit_start是默認(rèn)的縮放類(lèi)型凉泄。因此,例如蚯根,如果您使用fit_end雕沉,圖像將保持原始比例縮放,縮放后的圖片放置在視圖的右邊和底部叛甫。所以避咆,區(qū)別在于fit-endfit-start是“預(yù)設(shè)”,而對(duì)于matrix滩愁,則聲明要使用自己的matrix進(jìn)行縮放。

  4. 可參考:what is the meaning of ImageView.ScaleType=“MATRIX”


九:Adjust View Bounds

While not technically an ImageView.ScaleType this will come in handy. If you notice with CENTER_INSIDE, FIT_CENTER, FIT_END and FIT_START the actual bounds of the ImageView are much larger than the scaled image. To set the bounds of the ImageView to the height of the image inside, use android:adjustViewBounds="true” in your XML. It looks like this:


Adjust View Bounds 并不是 ImageView.ScaleType 的屬性,但它很有用括堤,其實(shí)CENTER_INSIDE, FIT_CENTER, FIT_END and FIT_START 這些縮放方式 ImageView 的實(shí)際邊界都是遠(yuǎn)遠(yuǎn)大于縮放后的圖片的。要把 ImageView 的邊界設(shè)置為它里面圖片的高度绍移,可以在xml 布局文件中使用 android:adjustViewBounds="true” 的方式悄窃,效果如下

image

參考文檔

擴(kuò)展

Building Ralph with SVG

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹂窖,隨后出現(xiàn)的幾起案子轧抗,更是在濱河造成了極大的恐慌,老刑警劉巖瞬测,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件横媚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡月趟,警方通過(guò)查閱死者的電腦和手機(jī)灯蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狮斗,“玉大人绽乔,你說(shuō)我怎么就攤上這事√及” “怎么了折砸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沙峻。 經(jīng)常有香客問(wèn)我睦授,道長(zhǎng),這世上最難降的妖魔是什么摔寨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任去枷,我火速辦了婚禮,結(jié)果婚禮上是复,老公的妹妹穿的比我還像新娘删顶。我一直安慰自己,他們只是感情好淑廊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布逗余。 她就那樣靜靜地躺著,像睡著了一般季惩。 火紅的嫁衣襯著肌膚如雪录粱。 梳的紋絲不亂的頭發(fā)上腻格,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音啥繁,去河邊找鬼菜职。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旗闽,可吹牛的內(nèi)容都是我干的酬核。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宪睹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愁茁!你這毒婦竟也來(lái)了蚕钦?” 一聲冷哼從身側(cè)響起亭病,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘶居,沒(méi)想到半個(gè)月后罪帖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邮屁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年整袁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佑吝。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坐昙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芋忿,到底是詐尸還是另有隱情炸客,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布戈钢,位于F島的核電站痹仙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏殉了。R本人自食惡果不足惜开仰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薪铜。 院中可真熱鬧众弓,春花似錦、人聲如沸隔箍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鞍恢。三九已至傻粘,卻和暖如春每窖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弦悉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工窒典, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稽莉。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓瀑志,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親污秆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劈猪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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