AndroidManifest.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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical" > <Button android:id="@+id/selectImageBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttton_seleclocal" /> <Button android:id="@+id/cutImageBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttton_cutImg" /> <ImageView android:id="@+id/imageView" android:contentDescription="@string/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
MainActivity.java
package com.example.ImageView2; 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.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private Button selectImageBtn; private Button cutImageBtn; private ImageView imageView; /** * 声明两个静态变量,主要用于意图的返回的标志 */ private static final int IMAGE_SELECT = 1; private static final int IMAGE_CUT = 2; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); selectImageBtn = (Button) findViewById(R.id.selectImageBtn); cutImageBtn = (Button) findViewById(R.id.cutImageBtn); selectImageBtn.setOnClickListener(this) ; cutImageBtn.setOnClickListener(this) ; } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK){ //选取图片,按照手机的屏幕大小显示 if(requestCode== IMAGE_SELECT){ Uri uri = data.getData(); //获得屏幕的宽度 int dw = getWindowManager().getDefaultDisplay().getWidth(); int dh = getWindowManager().getDefaultDisplay().getHeight()/2; try{ //实现对图片进行裁剪的是一个匿名内部类 BitmapFactory.Options factory = new BitmapFactory.Options(); factory.inJustDecodeBounds = true;//设置为true,允许查询图片不是按照像素分配给内存 //获取图片 Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory); //对图片的宽度和高度对应手机的屏幕进行匹配 //如果大于1,表示图片高度大小大于手机高度 int hRatio = (int) Math.ceil(factory.outHeight/(float)dh); //如果大于1,表示图片宽度大小大于手机宽度 int wRatio = (int) Math.ceil(factory.outWidth/(float)dw); //缩放到宽度为1/radio的尺寸和1/radio^2像素 if(hRatio>1 || wRatio>1) { if(hRatio>wRatio){ factory.inSampleSize=hRatio; }else { factory.inSampleSize=wRatio; } } factory.inJustDecodeBounds = false; //裁剪图片,进行适屏的操作 bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory); imageView.setImageBitmap(bitmap); }catch(Exception e){} }else if(requestCode== IMAGE_CUT){ //进行裁剪操作 Bitmap bitmap = data.getParcelableExtra("data"); imageView.setImageBitmap(bitmap); } } } public void onClick(View v) { switch(v.getId()){ case R.id.selectImageBtn: //声明一个意图,使用android自身带的一个意图说明,提取手机的图片. //参数指定提取路径 Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, IMAGE_SELECT); break; case R.id.cutImageBtn: Intent intent2 = getImageClipIntent(); startActivityForResult(intent2,IMAGE_CUT); break; } } private 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; } }
使用豌豆荚链接,选择图片上传一个图片进行测试