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