ImageView实现图片适应屏幕大小显示,和图片裁剪的功能.

实现的效果

主界面:



适应屏幕:



裁剪图片:



显示裁剪图片到ImagView:


源代码:

MainActivity.java

package com.imageview.activity;import java.io.FileNotFoundException;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.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private Button imageSelectBtn;private Button imageCutBtn;private ImageView imageView;// 声明两个静态整型变量,用于意图的返回标志private static final int IMAGE_SELECT = 1; // 选择图片private static final int IMAGE_CUT = 2; // 裁剪图片@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);setupViews();}// 我的一贯作风呵呵public void setupViews() {imageSelectBtn = (Button) findViewById(R.id.imageSelectButton);imageSelectBtn.setOnClickListener(this);imageCutBtn = (Button) findViewById(R.id.imageCutButton);imageCutBtn.setOnClickListener(this);imageView = (ImageView) findViewById(R.id.imageView);}@Overrideprotected 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();// 如果设置为true,允许查询图片不是按照像素分配内存factory.inJustDecodeBounds = true;Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null,factory);// 对图片的高度和宽度对应手机屏幕进行匹配// 宽度之比int wRatio = (int) Math.ceil(factory.outWidth / (float) dw); // 高度之比int hRatio = (int) Math.ceil(factory.outHeight / (float) dh); // 如果wRatio大于1,表示图片的宽度大于屏幕宽度,类似hRatioif (wRatio > 1 || hRatio > 1) {// inSampleSize>1则返回比原图更小的图片if (hRatio > wRatio) {factory.inSampleSize = hRatio;} else {factory.inSampleSize = wRatio;}}// 该属性为false则允许调用者查询图片无需为像素分配内存factory.inJustDecodeBounds = false;// 再次使用BitmapFactory对象图像进行适屏操作bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);imageView.setImageBitmap(bmp);} catch (FileNotFoundException e) {e.printStackTrace();}} else if (requestCode == IMAGE_CUT) { // 裁剪图片// 一定要和"return-data"返回的标签"data"一致Bitmap bmp = data.getParcelableExtra("data"); imageView.setImageBitmap(bmp);}}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.imageSelectButton:// 如何提取手机的图片,并且进行图片的选择Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intent, IMAGE_SELECT);break;case R.id.imageCutButton:Intent intent2 = getImageClipIntent();startActivityForResult(intent2, IMAGE_CUT);break;default:break;}}// 获取裁剪图片意图的方法private Intent getImageClipIntent() {Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);// 实现对图片的裁剪,必须要设置图片的属性和大小intent.setType("image/*"); // 设置属性,表示获取任意类型的图片intent.putExtra("crop", "true");// 设置可以滑动选选择区域的属性,注意这里是字符串"true"intent.putExtra("aspectX", 1);// 设置剪切框1:1比例的效果intent.putExtra("aspectY", 1);intent.putExtra("outputX", 80);intent.putExtra("outputY", 80);intent.putExtra("return-data", true);return intent;}}


布局文件main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <Button         android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="选择图片"    android:id="@+id/imageSelectButton"/>    <Button         android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="选择图片进行裁剪"    android:id="@+id/imageCutButton"/>    <!-- 用于显示裁剪后的图片 -->    <ImageView         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/imageView"/></LinearLayout>



更多相关文章

  1. android中从图库中选取图片
  2. Android实现九宫格
  3. RadioGroup实现底部导航
  4. android异步更新UI
  5. Android实现九宫格
  6. android中从图库中选取图片
  7. android中从图库中选取图片
  8. android 使用异步加载图片
  9. android ImageSwitch

随机推荐

  1. 为android系统添加USB AUDIO设备的放音
  2. 开发笔记---软键盘遮挡输入框和导航栏遮
  3. [原]如何在Android用FFmpeg+SDL2.0之同步
  4. UIL神器
  5. DRM在Android中(2)——HAL
  6. cocos2dx 在android手机输入特殊字符导致
  7. Android 抽象回调函数以及接口回调更新UI
  8. Android 之 使用File类在SD卡中读取数据
  9. Android如何获得系统(system)权限 !!!
  10. android :图片下载到本地后不让其在相册