Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android百日程序:高效載入大圖片

Android百日程序:高效載入大圖片

編輯:關於Android編程

問題:如果圖片很大,全部載入內存,而顯示屏又不大,那麼再大的圖片也不會提高視覺效果的,而且會消耗無謂的內存。

解決辦法就是根據實際需要多大的圖片,然後動態計算應該載入多大的圖片;但是因為不太可能圖片大小和實際需要的大小一致,故此需要載入圖片大小為一個2的某次方的值,而大於實際需要的大小。

 

如圖,載入一個微縮圖大小為100*100

\

新建一個項目,

 

建立一個類,以便調用其中的函數處理圖片資源,全部代碼如下:

 

package bill.su.loadbitmap;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class BitmapUtils {

	public static int calculateInSampleSize(BitmapFactory.Options options,
			int reqWidth, int reqHeight) {
		// Raw height and width of image
		final int height = options.outHeight;
		final int width = options.outWidth;
		int inSampleSize = 1;

		if (height > reqHeight || width > reqWidth) {

			final int halfHeight = height / 2;
			final int halfWidth = width / 2;

			// Calculate the largest inSampleSize value that is a power of 2 and
			// keeps both
			// height and width larger than the requested height and width.
			while ((halfHeight / inSampleSize) > reqHeight
					&& (halfWidth / inSampleSize) > reqWidth) {
				inSampleSize *= 2;
			}
		}

		return inSampleSize;
	}

	public static Bitmap decodeSampledBitmapFromResource(Resources res,
			int resId, int reqWidth, int reqHeight) {

		// First decode with inJustDecodeBounds=true to check dimensions
		final BitmapFactory.Options options = new BitmapFactory.Options();
		options.inJustDecodeBounds = true;
		BitmapFactory.decodeResource(res, resId, options);

		// Calculate inSampleSize
		options.inSampleSize = calculateInSampleSize(options, reqWidth,
				reqHeight);

		// Decode bitmap with inSampleSize set
		options.inJustDecodeBounds = false;
		return BitmapFactory.decodeResource(res, resId, options);
	}
}

主界面的xml代碼:

 

 



    


使用ImageView來顯示圖片

 

主界面的邏輯代碼添加代碼:

 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ImageView imageView = (ImageView) findViewById(R.id.pandaImageView);
		imageView.setImageBitmap(BitmapUtils.decodeSampledBitmapFromResource(
				getResources(), R.drawable.panda, 100, 100));
	}
注意R.drawable.panda是怎麼來的。只要在項目文件夾中的res文件夾的drawable文件夾添加一個圖片命名為panda,在Eclipse刷新項目就會顯示這個id了。如果沒有drawable這個文件夾也不要緊,直接自己新建一個文件夾就可以了。

 

如果圖片沒有顯示,很可能是圖片資源不存在,這樣項目是不會提示錯誤的,直接沒有顯示出來。


看看項目結構圖,就知道如何建立這個項目了:

\

這裡主要學習的代碼是BitmapUtils中的代碼,這樣已經封裝好了,以後可以當做自己的一個資源類調用了。

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved