java圖片縮放實(shí)現(xiàn)圖片填充整個(gè)屏幕
在Android中因?yàn)椴煌袼厥謾C(jī)的多樣化,對(duì)于一張圖片,放大不同的手機(jī)上因像素不同顯示上也會(huì)有區(qū)別。
現(xiàn)有如下需求:將一張圖片寬度充滿整個(gè)屏幕并顯示。
我們常常做的可能是如下兩種方式對(duì)圖片進(jìn)行處理。
通過(guò)<ImageView>,定義屬性layout_parent="match_parent"和layout_parent="wrap_content",同時(shí)利用<ImageView>的scaleType屬性進(jìn)行縮放。
- scaleType="fitXY":當(dāng)設(shè)置為該屬性時(shí),會(huì)導(dǎo)致圖片橫向拉伸,導(dǎo)致圖片變形,如果圖片上有字體,那么這將是很糟的一件事。
- scaleType="centerCrop":等比縮放應(yīng)該沒(méi)問(wèn)題了吧,可是很尷尬,還是不行。圖片在處理的時(shí)候,首先會(huì)得到圖片的大小,確定圖片寬高之后再進(jìn)行縮放。這樣在圖片顯示的范圍確定之后再以圖片的中心點(diǎn)進(jìn)行等比縮放,直到寬度完全充滿了屏幕。這樣很尷尬,圖片的上下會(huì)被切掉,這樣圖片顯示不全,仍然不是我們想要的。
我的做法是,在代碼中通過(guò)縮放后得到圖片,然后通過(guò)設(shè)置backgroud的方法將圖片添加進(jìn)去,這樣就解決了,那么上代碼:
//得到圖片的分辨率,獲取寬度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int mScreenWidth = dm.widthPixels;// 獲取屏幕分辨率寬度 int mScreenHeight = dm.heightPixels; //加載圖片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bank_help); int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight(); //得到圖片寬度比 float num = mScreenWidth / (float)bitmapWidth; Matrix matrix = new Matrix(); matrix.postScale(num, num); // 產(chǎn)生縮放后的Bitmap對(duì)象 Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true);
以上代碼,分為以下步驟
1. 獲取屏幕分辨率。
2. 獲取圖片并測(cè)量寬高,獲取圖片的寬高
3. 通過(guò)屏幕寬度/圖片寬度得到對(duì)應(yīng)的縮放比
4. 創(chuàng)建Matrix對(duì)象,并確定縮放。(ps:這個(gè)東西很叼,在前面的漸變色中也用到了改對(duì)象)
5. 通過(guò)Bitmap.createBitmap()方法生成圖片。(ps:最后一個(gè)參數(shù)必須傳true,傳入false的話,縮放的圖片會(huì)顯示不清楚)
以上就是java圖片處理相關(guān)操作介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
- Java實(shí)現(xiàn)圖片比率縮放
- java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長(zhǎng)寬縮放
- java高質(zhì)量縮放圖片的示例代碼
- java實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)和馬賽克化
- Java實(shí)現(xiàn)的圖片高質(zhì)量縮放類(lèi)定義與用法示例
- Java實(shí)現(xiàn)的微信圖片處理工具類(lèi)【裁剪,合并,等比例縮放等】
- java對(duì)圖片進(jìn)行壓縮和resize縮放的方法
- Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例
- 簡(jiǎn)單的java圖片處理類(lèi)(圖片水印 圖片縮放)
- java項(xiàng)目實(shí)現(xiàn)圖片等比縮放
相關(guān)文章
深入解讀Java代碼組織中的package包結(jié)構(gòu)
這篇文章主要介紹了Java代碼組織中的package包結(jié)構(gòu),是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-03-03Java實(shí)現(xiàn)基于JDBC操作mysql數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Java實(shí)現(xiàn)基于JDBC操作mysql數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了java使用JDBC實(shí)現(xiàn)針對(duì)mysql數(shù)據(jù)庫(kù)的連接、查詢、輸出等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Java隨機(jī)字符串與簡(jiǎn)單加密工具類(lèi)詳解
這篇文章主要介紹了Java隨機(jī)字符串與簡(jiǎn)單加密工具類(lèi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解
這篇文章主要介紹了在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解,在Java中,使用關(guān)鍵字volatile和使用鎖(如synchronized關(guān)鍵字或 java.util.concurrent包中的鎖)來(lái)確保對(duì)共享變量的修改在多線程環(huán)境中能夠正確地被其他線程所觀察到,需要的朋友可以參考下2023-08-08Java設(shè)計(jì)模式之模版方法模式簡(jiǎn)介
這篇文章主要介紹了Java設(shè)計(jì)模式之模版方法模式,需要的朋友可以參考下2014-07-07