一、项目目录结构
二、activity_main.xml界面
三、activity_main.xml代码
<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="com.zgs.loadBigImage.MainActivity" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="加载" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
四、MainActivity.java代码
package com.zgs.loadBigImage;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
private int screenWidth;
private int screenHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//[1]找到iv用于显示加载图片
iv = (ImageView) findViewById(R.id.iv);
//[2]获取手机的分辨率,获取windowmanager实例
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
//谷歌过时方法
screenWidth = wm.getDefaultDisplay().getWidth();
screenHeight = wm.getDefaultDisplay().getHeight();
//谷歌新方法
// Point size=new Point();
// wm.getDefaultDisplay().getSize(size);
// screenWidth = size.x;
// screenHeight = size.y;
System.out.println("手机的宽和高:"+screenWidth+"---"+screenHeight);
}
//点击按钮 加载dog.jpg 这张图片
public void click(View v) {
//[2]把dog.jpg 转换成bitmap
//创建bitmap工厂的配置参数
BitmapFactory.Options options = new Options();
//返回一个null 没有bitmap 不去真正解析位图 但是能返回图片的一些信息(宽和高)
options.inJustDecodeBounds = true;
String pathNameString = Environment.getExternalStorageDirectory().getAbsolutePath();
System.out.println(pathNameString);
BitmapFactory.decodeFile("/storage/sdcard/dog.jpg",options);
//[3]获取图片的宽和高
int imgWidth = options.outWidth;
int imgHeight = options.outHeight;
System.out.println("图片的宽:"+imgWidth+"-----"+imgHeight);
//[4]计算缩放比
int scale = 1; //我们定义的缩放比
int scalex = imgWidth/screenWidth;
int scaley = imgHeight /screenHeight;
if (scalex >=scaley&&scalex > scale) {
scale = scalex;
}
if (scaley > scalex && scaley>scale) {
scale = scaley;
}
System.out.println("缩放比为:"+scale);
//[5]按照缩放比显示图片
options.inSampleSize = scale;
//[6]开始真正的解析位图
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile("/storage/sdcard/dog.jpg",options);
//[7]把bitmap显示到控件上
iv.setImageBitmap(bitmap);
}
}
五、AndroidManifest.xml代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zgs.loadBigImage"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
注意一定要在配置清单中加上面代码中的这两句话:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>