這篇文章以"從SD Card加載圖像視圖(ImageView)"為例, 首先檢查源位圖的大小, 通過BitmapFactory.Options設置inSampleSize, 這樣做可以減少對系統資源的要求.
先把較大的圖片文件複製到SD Card中.
main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <? xml version = "1.0" encoding = "utf-8" ?> android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "@string/hello" /> < ImageView android:id = "@+id/imageview" android:layout_gravity = "center" android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:scaleType = "center" /> </ LinearLayout > |
Java源代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | package com.AndroidImage; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import android.widget.Toast; public class AndroidImage extends Activity { private String imageFile = "/sdcard/AndroidSharedPreferencesEditor.png" ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); ImageView myImageView = (ImageView)findViewById(R.id.imageview); //Bitmap bitmap = BitmapFactory.decodeFile(imageFile); //myImageView.setImageBitmap(bitmap); Bitmap bitmap; float imagew = 300 ; float imageh = 300 ; BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options(); bitmapFactoryOptions.inJustDecodeBounds = true ; bitmap = BitmapFactory.decodeFile(imageFile, bitmapFactoryOptions); int yRatio = ( int )Math.ceil(bitmapFactoryOptions.outHeight/imageh); int xRatio = ( int )Math.ceil(bitmapFactoryOptions.outWidth/imagew); if (yRatio > 1 || xRatio > 1 ){ if (yRatio > xRatio) { bitmapFactoryOptions.inSampleSize = yRatio; Toast.makeText( this , "yRatio = " + String.valueOf(yRatio), Toast.LENGTH_LONG).show(); } else { bitmapFactoryOptions.inSampleSize = xRatio; Toast.makeText( this , "xRatio = " + String.valueOf(xRatio), Toast.LENGTH_LONG).show(); } } else { Toast.makeText( this , "inSampleSize = 1" , Toast.LENGTH_LONG).show(); } bitmapFactoryOptions.inJustDecodeBounds = false ; bitmap = BitmapFactory.decodeFile(imageFile, bitmapFactoryOptions); myImageView.setImageBitmap(bitmap); } } |
沒有留言:
張貼留言