最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 實(shí)現(xiàn)加載大圖片的方法

 更新時(shí)間:2017年04月02日 17:28:50   作者:我好_菜  
對(duì)于超大的圖片,如果不縮放的話,容易導(dǎo)致內(nèi)存溢出。而經(jīng)過處理后,無論多大的圖片,都能夠在手機(jī)屏幕上加載出來,不會(huì)導(dǎo)致內(nèi)存溢出。本文將對(duì)Android 加載大圖片的實(shí)現(xiàn)方法進(jìn)行介紹,下面跟著小編一起來看下吧

項(xiàng)目簡(jiǎn)介:

該項(xiàng)目為加載大圖片

詳細(xì)介紹:

對(duì)于超大的圖片,如果不縮放的話,容易導(dǎo)致內(nèi)存溢出。而經(jīng)過處理后,無論多大的圖片,都能夠在手機(jī)屏幕上加載出來,不會(huì)導(dǎo)致內(nèi)存溢出。當(dāng)然,臉黑的除外

該應(yīng)用涉及到的知識(shí)有:

- 1.Bitmap的使用

- 2.Android手機(jī)中加載圖片的原理

  有的時(shí)候,我們加載一張不足1M的圖片,盡管手機(jī)的堆內(nèi)存有16M,仍然會(huì)導(dǎo)致內(nèi)存溢出,why?

  這就更計(jì)算機(jī)加載圖片的原理有關(guān)了:

  1).手機(jī)會(huì)解析圖片的所有像素信息,把每個(gè)像素信息都存入到內(nèi)存中

  2).Android中保存圖片是用ARGB保存的,A表示阿爾法透明度,所以一個(gè)像素點(diǎn)占用了4個(gè)字節(jié)

例如:一張1080*720像素的24位位圖圖片,可能實(shí)際上經(jīng)過壓縮后大小只有幾十K,而在android手機(jī)加載這張圖片所需要的內(nèi)存大小為:

1080*720*(3+1)=3110400 byte = 3037 KB = 2.9MB

實(shí)際上,圖片中還包含一點(diǎn)其他的信息,例如圖片保存的格式,使用的相機(jī)名稱,以及拍攝時(shí)間等,所以總體來說要比3110400字節(jié)大一旦,大概多上幾十個(gè)字節(jié)

步驟:

1.創(chuàng)建一個(gè)Android項(xiàng)目,編寫布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="hhh.exercise.smultimedia_a_image.MainActivity" >

 <EditText
  android:id="@+id/ed"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:text="a.jpg"
  android:textColor="#00ff00"
  android:textSize="30sp" />

 <requestFocus />

 <Button
  android:onClick="see"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="點(diǎn)擊看片"
  android:textColor="#00ffff"
  android:textSize="30sp" />

 <ImageView
  android:id="@+id/iv"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_gravity="center"
  android:src="@drawable/ic_launcher" />
</LinearLayout>

界面如下所示:

2.在MainActivity中編寫代碼:

public class MainActivity extends Activity {
 private EditText ed;
 private ImageView iv;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ed = (EditText) findViewById(R.id.ed);
  iv = (ImageView) findViewById(R.id.iv);
 }
 public void see(View view) {
  // 確定要加載的圖片(這里為了調(diào)試方面,把所有的圖片都放在SD卡中,然后在界面上輸入圖片的名字,根據(jù)給名字拼接字符串)
  String fileName = ed.getText().toString();
  String path = Environment.getExternalStorageDirectory().getPath()+ "/" + fileName;

  // 該類為位圖工廠(BitmapFactory)的內(nèi)部類,用來封裝參數(shù)對(duì)象
  Options opts = new Options();

  // 不為像素申請(qǐng)內(nèi)存,只獲取圖片的寬、高信息
  // inJustDecodeBound該字段設(shè)置為true,那么位圖工廠構(gòu)建BitMap對(duì)象時(shí)返回的是空值,但是會(huì)把圖片的一些信息返回在Options對(duì)象中(如圖片的寬、高等)
  opts.inJustDecodeBounds = true;

  // 第二個(gè)參數(shù)是解析圖片時(shí)傳入的參數(shù),由于可能傳入的參數(shù)過多,所以直接把所有參數(shù)封裝成一個(gè)對(duì)象
  BitmapFactory.decodeFile(path, opts);

  // 獲取圖片的額寬高
  int imgWidth = opts.outWidth;
  int imgHeight = opts.outHeight;

  // 獲取當(dāng)前手機(jī)屏幕的寬高
  Display dp = getWindowManager().getDefaultDisplay();
  int screenWidth = dp.getWidth();
  int screenHeight = dp.getHeight();

  // 設(shè)置默認(rèn)縮放比為1
  int scale = 1;

  // 計(jì)算圖片寬高與屏幕寬高比例,即計(jì)算寬縮放比,高縮放比
  int scaleWidth = imgWidth / screenWidth;
  int scaleHeight = imgHeight / screenHeight;

  // 選擇縮放比例,如果圖片比屏幕小,就不進(jìn)行縮放.如果圖片比屏幕大,但是寬高縮放比例不同,選擇縮放比大
  if (scaleWidth >= scaleHeight && scaleWidth > 1) {
   scale = scaleWidth;
  } else if (scaleWidth < scaleHeight && scaleHeight > 1) {
   scale = scaleHeight;
  }
  // 在Options的對(duì)象中設(shè)置縮放比例
  opts.inSampleSize = scale;
  // 一定要把inJustDecodeBound該字段設(shè)置為false,實(shí)際上默認(rèn)值是false,
  // 但是在前面的代碼中已經(jīng)改為了true,所以要更改過來。當(dāng)然,也可以重新new 一個(gè)Option是對(duì)象
  opts.inJustDecodeBounds = false;
  Bitmap bm = BitmapFactory.decodeFile(path, opts);
  iv.setImageBitmap(bm);
 }
}

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • Android自定義view實(shí)現(xiàn)圓形waveview

    Android自定義view實(shí)現(xiàn)圓形waveview

    這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)圓形waveview,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解OpenGL Shader彩虹條紋效果的實(shí)現(xiàn)

    詳解OpenGL Shader彩虹條紋效果的實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何通過OpenGL Shader實(shí)現(xiàn)彩虹條紋效果,最后的效果和圖片處理軟件colorow中的彩虹效果濾鏡相似,需要的可以參考一下
    2022-02-02
  • Android實(shí)現(xiàn)毛玻璃效果的對(duì)話框

    Android實(shí)現(xiàn)毛玻璃效果的對(duì)話框

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)毛玻璃效果的對(duì)話框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • android:TextView簡(jiǎn)單設(shè)置文本樣式和超鏈接的方法

    android:TextView簡(jiǎn)單設(shè)置文本樣式和超鏈接的方法

    這篇文章主要介紹了android:TextView簡(jiǎn)單設(shè)置文本樣式和超鏈接的方法,涉及TextView常見文字屬性的相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • Android Git submodule詳解用法示例

    Android Git submodule詳解用法示例

    項(xiàng)目中經(jīng)常會(huì)使用到第三方的 git 庫(kù), 將三方庫(kù)整合到項(xiàng)目中最簡(jiǎn)單的辦法就是復(fù)制粘貼, 但是如果這個(gè)庫(kù)升級(jí)了一個(gè)很酷炫的功能, 你要怎么整合進(jìn)來呢?(其實(shí)就是 git 版的包管理器)這就是本次要介紹的 git-submodule 操作, 直接把第三方的版本庫(kù)合并到自己的庫(kù)中
    2021-11-11
  • Android中微信小程序支付倒計(jì)時(shí)功能

    Android中微信小程序支付倒計(jì)時(shí)功能

    大家在使用微信的時(shí)候都注意過微信支付倒計(jì)時(shí)功能,怎么實(shí)現(xiàn)的呢?今天小編給大家分享微信小程序支付倒計(jì)時(shí)功能實(shí)現(xiàn)思路詳解,一起看看吧
    2016-12-12
  • Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問題小結(jié)

    Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問題小結(jié)

    這篇文章主要介紹了Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問題的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹

    Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹

    這篇文章主要介紹了Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼及實(shí)現(xiàn)微信搖一搖的思路,需要的朋友可以參考下
    2016-11-11
  • Android矢量圖之VectorDrawable類自由填充色彩

    Android矢量圖之VectorDrawable類自由填充色彩

    這篇文章主要介紹了Android矢量圖之VectorDrawable類自由填充色彩的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Kotlin中局部方法的深入探究

    Kotlin中局部方法的深入探究

    這篇文章主要給大家介紹了關(guān)于Kotlin中局部方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論

舞钢市| 竹溪县| 虹口区| 长治县| 商丘市| 隆德县| 徐水县| 肃南| 永济市| 泰兴市| 鲁山县| 襄樊市| 恩施市| 安徽省| 密山市| 屏东县| 玉林市| 南昌县| 绥芬河市| 稻城县| 陕西省| 临清市| 丰宁| 扶绥县| 浮山县| 长宁县| 肇源县| 麟游县| 辽源市| 夏邑县| 屏东市| 嫩江县| 察雅县| 曲阳县| 开封县| 平塘县| 锡林郭勒盟| 温州市| 竹溪县| 遵义县| 甘孜|