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">
<Button
android:id="@+id/selectImageBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="selectImageBtn" />
<Button
android:id="@+id/catImageBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="catImageBtn" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_search" />
</LinearLayout>
package com.xy.caijiantupian;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements View.OnClickListener {
/** Called when the activity is first created. */
private Button selectImageBtn;
private Button cutImageBtn;
private ImageView imageView;
private static final int IMAGE_SELECT = 1;
private static final int IMAGE_CUT = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
selectImageBtn = (Button) findViewById(R.id.selectImageBtn);
cutImageBtn = (Button) findViewById(R.id.catImageBtn);
imageView = (ImageView) findViewById(R.id.imageView);
cutImageBtn.setOnClickListener(this);
selectImageBtn.setOnClickListener(this);
}
public void onClick(View v) {
// 截取适合屏幕大小的图片
if (v == selectImageBtn) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, IMAGE_SELECT);
}// 一般用于头像等需要设置指定大小
else if (v == cutImageBtn) {
Intent intent = getImageClipIntent();
startActivityForResult(intent, IMAGE_CUT);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
// TODO Auto-generated method stub
if (resultCode == RESULT_OK) {
if (requestCode == IMAGE_SELECT) {
Uri imageFileUri = intent.getData();
int dw = getWindowManager().getDefaultDisplay().getWidth();
int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;
// 已屏幕宽 和一般的高作为图片显示的最大尺寸
try {
BitmapFactory.Options factory = new BitmapFactory.Options();
factory.inJustDecodeBounds = true; // 当为true时 允许查询图片不为
// 图片像素分配内存
Bitmap bmp = BitmapFactory.decodeStream(
getContentResolver().openInputStream(imageFileUri),
null, factory);
int hRatio = (int) Math
.ceil(factory.outHeight / (float) dh); // 图片是高度的几倍
int wRatio = (int) Math.ceil(factory.outWidth / (float) dw); // 图片是宽度的几倍
System.out.println("hRatio:" + hRatio + " wRatio:"
+ wRatio);
// 缩小到 1/ratio的尺寸和 1/ratio^2的像素
if (hRatio > 1 || wRatio > 1) {
if (hRatio > wRatio) {
factory.inSampleSize = hRatio;
} else
factory.inSampleSize = wRatio;
}
factory.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageFileUri), null, factory);
imageView.setImageBitmap(bmp);
} catch (Exception ex) {
}
} else if (requestCode == IMAGE_CUT) {
Bitmap bmp = intent.getParcelableExtra("data");
imageView.setImageBitmap(bmp);
}
}
}
/**
* 获取剪切后的图片
*/
public static Intent getImageClipIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);// 裁剪框比例
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);// 输出图片大小
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
}