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

实现的效果

主界面:

Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能


适应屏幕:

Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能


裁剪图片:

Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能


显示裁剪图片到ImagView:

Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能


源代码:

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. Android 禁止响应屏幕翻转
  4. 与屏幕有关的设置:禁止横竖屏切换;横竖屏切换不重启Activity;动态设
  5. android中从图库中选取图片
  6. [记录]Android虚拟机大屏幕设置
  7. Android使用libjpeg实现图片压缩

随机推荐

  1. Android(安卓)代码混淆exception解决办法
  2. Android通知频道,通知点
  3. Intents and Intent Filters
  4. proguard.cfg 配置文件
  5. android pull解析XML文件
  6. android的textView周围添加图片
  7. mipmap 目录和drawable 目录有什么区别
  8. Android(安卓)一张图理解getWidth和getMe
  9. Android获取应用权限列表
  10. Android(安卓)6.0 相关问题