編輯:關於android開發
本文演示android中圖片加載到內存
首先設計界面:

代碼如下:
<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=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="load"
android:text="加載圖片到內存" />
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
往mnt/sdcard中上傳測試圖片
添加邏輯部分代碼:
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
}
public void load() {
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg");
iv.setImageBitmap(bitmap);
}
}
運行代碼,產生錯誤,原因是圖片太大(選取的是大照片)
可以使用BitmapFactory中包含的靜態類Options在不解析圖片信息的前提下得到圖片的寬高信息:
BitmapFactory.Options opts = new Options();
// 不去解析圖片信息,只是得到圖片的頭部信息 寬高
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile("/sdcard/a.jpg", opts);
int imageHeight = opts.outHeight;
int imagewidth = opts.outWidth;
System.out.println("圖片寬:" + imagewidth);
System.out.println("圖片高" + imageHeight);
運行一下:
09-04 06:09:10.519: I/System.out(1812): 圖片寬:2560
09-04 06:09:10.519: I/System.out(1812): 圖片高1920
接下來得到手機屏幕的寬高:
//得到手機屏幕的寬高
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
int height = wm.getDefaultDisplay().getHeight();
int width = wm.getDefaultDisplay().getWidth();
可以看到getHeight與getWidth方法均已過時,使用下面的方法替代:
// 得到手機屏幕的寬高
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Point outSize = new Point();
wm.getDefaultDisplay().getSize(outSize); // 3.0以後的版本才能使用
完整代碼如下:
package com.wuyudong.loadimage;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Point;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
private int windowHeight;
private int windowWidth;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
// 得到手機屏幕的寬高
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
windowHeight = wm.getDefaultDisplay().getHeight();
windowWidth = wm.getDefaultDisplay().getWidth();
//Point outSize = new Point();
//wm.getDefaultDisplay().getSize(outSize); // 3.0以後的版本才能使用
//windowHeight = outSize.y;
//windowWidth = outSize.x;
}
public void load(View view) {
// Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg");
// iv.setImageBitmap(bitmap);
// 圖片解析的配置
BitmapFactory.Options opts = new Options();
// 不去解析圖片信息,只是得到圖片的頭部信息 寬高
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile("/sdcard/a.jpg", opts);
int imageHeight = opts.outHeight;
int imagewidth = opts.outWidth;
System.out.println("圖片寬:" + imagewidth);
System.out.println("圖片高" + imageHeight);
// 計算縮放比例
int scaleX = imagewidth / windowWidth;
int scaleY = imageHeight / windowHeight;
int scale = 1;
if (scaleX > scaleY & scaleY >= 1) {
scale = scaleX;
}
if (scaleY > scaleX & scaleX >= 1) {
scale = scaleY;
}
//解析圖片
opts.inJustDecodeBounds = false;
//采樣率
opts.inSampleSize = scale;
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg", opts);
iv.setImageBitmap(bitmap);
}
}
dagger2記錄篇,dagger2記錄
dagger2記錄篇,dagger2記錄作為一個碼農,什麼都不用多講,貼代碼 build project build module Application pub
美團Android DEX自動拆包及動態加載簡介
美團Android DEX自動拆包及動態加載簡介 概述 作為一個android開發者,在開發應用時,隨著業務規模發展到一定程度,不斷地加入新功能、添加新的類
Android特效專輯(八)——實現心型起泡飛舞的特效,讓你的APP瞬間暖心
Android特效專輯(八)——實現心型起泡飛舞的特效,讓你的APP瞬間暖心 Android特效專輯(八)——實現心型起泡飛舞的特效,讓你的A
Android事件總線,android總線
Android事件總線,android總線Android中Activity、Service、Fragment之間的相互通信比較麻煩,主要有以下一些方法: (1)使用廣播,