2023年黑馬程序員安卓教程大圖片之縮放加載_第1頁(yè)
2023年黑馬程序員安卓教程大圖片之縮放加載_第2頁(yè)
2023年黑馬程序員安卓教程大圖片之縮放加載_第3頁(yè)
2023年黑馬程序員安卓教程大圖片之縮放加載_第4頁(yè)
2023年黑馬程序員安卓教程大圖片之縮放加載_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

大圖片之縮放加載在上一個(gè)文檔“圖片加載之OOM”中,我們闡述了Android下加載大圖片的方法,下面我們就一個(gè)具體的DEMO來(lái)實(shí)現(xiàn)大圖片的加載。具體環(huán)節(jié)如下:新建工程【File】【new】【AndroidApplicationProject】命名為:02_縮放加載大圖片到內(nèi)存編寫(xiě)布局根據(jù)需求編寫(xiě)布局文獻(xiàn),效果如圖1-1所示:圖1-1所示圖1-1相應(yīng)的xml布局頁(yè)面如例1-1:例1-1<RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:onClick="loadImage"android:layout_width="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:layout_height="wrap_content"android:text="加載圖片"/><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/iv"/></RelativeLayout>由例1-1可知:當(dāng)點(diǎn)擊按鈕“加載圖片”時(shí),便執(zhí)行l(wèi)oadImage方法從SD卡中讀取圖片數(shù)據(jù)并將該圖片的縮略圖部署在ImageView控件上。手機(jī)的分辨率在獲取該圖片的縮略圖時(shí),我們需要知道這個(gè)手機(jī)屏幕的寬和高。如何獲取屏幕的高度和寬度?具體代碼如例1-2所示例1-2@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv=(ImageView)findViewById(R.id.iv);//手機(jī)屏幕的分辨率WindowManagerwm=(WindowManager)getSystemService(WINDOW_SERVICE);Displaydisplay=wm.getDefaultDisplay();//該方法已通過(guò)時(shí),但是考慮版本的兼容我們還是應(yīng)當(dāng)選擇這個(gè)方法screenWidth=display.getWidth();//返回值是int類(lèi)型的screenHeight=display.getHeight();}例1-2可知:getSystemService獲取系統(tǒng)對(duì)手機(jī)屏幕的服務(wù)對(duì)象WindowManager,然后得到窗口管理器WindowManager的Display對(duì)象,最后通過(guò)該對(duì)象的get方法得到這個(gè)屏幕的高度和寬度。圖片的分辨率手機(jī)內(nèi)存中表達(dá)圖片的方式是以位圖的形式將圖片加載到內(nèi)存中。為了避免OOM,我們選擇內(nèi)存加載該圖片的縮略圖。要得到該圖片的縮略圖,我們需要知道這個(gè)圖片自身的分辨率。下面是獲取圖片分辨率的具體方法。類(lèi)BitmapFactory的作用是從各個(gè)來(lái)源創(chuàng)建位圖對(duì)象,這些來(lái)源涉及文獻(xiàn),數(shù)據(jù)流,字節(jié)數(shù)組。本例中我們讀指定文獻(xiàn)下圖片的位圖,參考API文檔,在讀取指定途徑下的文獻(xiàn)數(shù)據(jù)流時(shí)有以下兩種方法,如圖1-2所示:圖1-2所示從圖1-2可知:若指定途徑下圖片解析成功,則這兩個(gè)方法返回的都是一個(gè)Bitmap;當(dāng)解析失敗則返回的都是null。對(duì)于第一個(gè)方法,若第二個(gè)參數(shù)Options不為空,則還會(huì)返回指定途徑下圖片的其他信息如圖片大小。我們發(fā)現(xiàn):這兩個(gè)方法都會(huì)去解析指定途徑下的圖片,都會(huì)去申請(qǐng)內(nèi)存空間。而我們所需要的僅僅是這個(gè)圖片的屬性值(高度和寬度),并不想在內(nèi)存中加載這個(gè)圖片。那么,如何做既能得到圖片的屬性值又不在內(nèi)存中加載這個(gè)圖片呢?方法如下例1-3所示:例1-3publicvoidloadImage(Viewview){Optionsopts=newOptions();// 不去直接解析這個(gè)位圖,返回的是NUll只是獲取這個(gè)位圖的文獻(xiàn)信息 opts.inJustDecodeBounds=true; BitmapFactory.decodeFile("mnt/sdcard/vl.jpg",opts); intpicHeight=opts.outHeight; intpicWidth=opts.outWidth; System.out.println("屏幕的高度:"+screenWidth+"~"+screenHeight); System.out.println("屏幕的寬度:"+picWidth+"~"+picHeight); }例1-3通過(guò)opts.inJustDecodeBounds=true便可達(dá)只到讀取圖片屬性的目的,下面我們對(duì)這個(gè)字段進(jìn)行了解,參考文檔如圖1-3。圖1-3所示當(dāng)設(shè)立inJustDecodeBounds的值為true時(shí),解析器將不會(huì)去解析指定途徑下的圖片,返回值是null。但是,我們卻允許得到圖片的屬性值而無(wú)需給這個(gè)圖片分派任何內(nèi)存。當(dāng)然,當(dāng)我們?cè)O(shè)立inJustDecodeBounds的值為false時(shí),也可以得到這個(gè)指定途徑下的位圖。計(jì)算縮略比我們已經(jīng)得到了手機(jī)屏幕的分辨率和圖片的分辨率,接下來(lái)就是計(jì)算圖片的縮略比例了,然后將原圖片按照這個(gè)縮略比例進(jìn)行縮放,最后再把縮放之后的圖片加載到內(nèi)存中。如何計(jì)算縮略比?計(jì)算縮略比的算法類(lèi)似于我們數(shù)學(xué)概率上的抽樣調(diào)查。Android中,我們先分別計(jì)算出圖片的高和寬與手機(jī)屏幕高和寬的比例值(假設(shè)分別為dy和dx),然后比較這個(gè)兩個(gè)比例值的大小,我們會(huì)選擇值大者為這個(gè)圖片的縮放比。具體代碼如例1-4例1-4publicvoidloadImage(Viewview){ ........... intscale=1; intdy=picHeight/screenHeight;//豎值方向的縮放比 intdx=picWidth/screenWidth;//水平方向的縮放比 if(dy>dx&&dx>1){ scale=dy; } //對(duì)于這兩個(gè)縮放比相同的解決 if(dx>=dy&&dy>1){ scale=dx; } System.out.println("縮放比例為:"+scale);}加載縮放圖片到內(nèi)存得到圖片的縮放比之后,我們就可以先得到這個(gè)圖片的縮放圖啦。那么,如何指定縮放比,得到這個(gè)圖片的縮放圖呢?代碼如例1-5所示:例1-5publicvoidloadImage(Viewview){............ System.out.println("縮放比例為:"+scale);opts.inSampleSize=scale;//指定壓縮比 opts.inJustDecodeBounds=false;//為false時(shí),才干得到這個(gè)圖片的位圖 Bitmapbitmap=BitmapFactory.decodeFile("mnt/sdcard/vl.jpg",opts); iv.setImageBitmap(bitmap);}例1-1通過(guò)opts.inSam

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論