編輯:關於Android編程
Android系統以ARGB表示每個像素,所以每個像素占用4個字節,很容易內存溢出。假設手機內存比較小,而要去加載一張像素很高的圖片的時候,就會因為內存不足導致崩潰。這種異常是無法捕獲的
內存不足並不是說圖片的大小決定的,最主要的因素是像素問題。
因此加載大圖片就要設置相應的縮放比例。
*計算機把圖片所有像素信息全部解析出來,保存至內存 *Android保存圖片像素信息,是用ARGB保存 *手機屏幕320*480,總像素:153600 *圖片寬高2400*3200,總像素7680000 *算法:得到縮放比率 *2400 / 320 = 7 *3200 / 480 = 6
代碼:
package com.itny.loadimage;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Point;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
//解析圖片時需要使用到的參數都封裝在這個對象裡了
Options opt = new Options();
//不為像素申請內存,只獲取圖片寬高
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
//拿到圖片寬高
int imageWidth = opt.outWidth;
int imageHeight = opt.outHeight;
Display dp = getWindowManager().getDefaultDisplay();
//拿到屏幕寬高
int screenWidth = dp.getWidth();
int screenHeight = dp.getHeight();
//計算縮放比例
int scale = 1;//表示默認不縮放
int scaleWidth = imageWidth / screenWidth;
int scaleHeight = imageHeight / screenHeight;
//哪個縮放比例大要哪個 >=防止縮放比例是一樣的程序不執行這裡
if(scaleWidth >= scaleHeight && scaleWidth >= 1){//scaleWidth >= 1 只縮放比屏幕像素大的圖片
scale = scaleWidth;
}
else if(scaleWidth < scaleHeight && scaleHeight >= 1){
scale = scaleHeight;
}
//設置縮放比例
opt.inSampleSize = scale;
//這個時候有了縮放比了。因此要再一次為圖片申請內存,使用BitmapFactory去解析位圖
opt.inJustDecodeBounds = false;
//此時的Bitmap就是縮放後的Bitmap。
Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bm);//Sets a Bitmap as the content of this ImageView.
}
}
這樣就能加載一張較大的圖片了,運行如下:

android控件之間事件傳遞
public boolean dispatchTouchEvent(MotionEvent ev){} 用於事件的分發,Android中所有的事件都必須經
Android動態加載插件APK
問題起因我曾經在開發Android Application的過程中遇到過那個有名的65k方法數的問題。如果你開發的應用程序變得非常龐大,你八成會遇到這個問題。這個問題實際
Android DrawerLayout帶有側滑功能的布局類(1)
DrawerLayout顧名思義就是一個管理布局的。使用方式可以與其它的布局類類似。DrawerLayout帶有滑動的功能。只要按照drawerLayout的規定布局方式
退出應用的第N+1種方法-一行代碼退出應用
前N種方法之前有在網上了解過退出應用的方法,其中包括在每個activity中注冊關閉界面的廣播接受者,當想推出應用時發一條廣播關閉所有的界面,最常用的使用list去模擬任