在Android中,要将一张图片显示在屏幕上,需要创建一个显示图片的对象,该对象就是ImageView。

1.ImageView常用属性

  要对图片进行适屏裁剪操作,首先需要了解ImageView的常用属性。

  ImageView的常用属性如图1所示。

图1 ImageView的常用属性

  其中,android:adjustViewBounds[boolean]属性的作用是设置为true时,可以调整图片的边界。android:src(int)属性用于加载图片资源。android:scaleType(ImageView.ScaleType)属性的作用是设置图片以何种方式(类型)匹配ImageView控件,其可选设置项有matrix、fitXY、fitStart、fitCenter、fitEnd、center、centerCrop、centerInside,这些设置值的不同之处如图2所示。

图2 ScaleType属性值

2.ImageView的适屏与裁剪

  适屏是指将图片以合适的大小显示在手机的屏幕上。如果图片的大小不符合手机屏幕的显示要求,那么就需要对图片进行适当的裁剪,以满足显示需求。

  在对图片进行适屏显示和裁剪之间,我们首先需要做的是从手机的图库中获取图片资源。

2.1获取手机的图片库

  在Android中,如何来获取手机里的图片资源呢?其实很简单,只需要通过如下方法就可以很方便的打开手机的图片库了。

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

  我们知道在Android中,Intent负责对应用中一次操作的动作、动作涉及数据及附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

  所以此处通过intent.ACTION_PICK(拾取)来完成对手机中的图片库的调用。

  打开手机的图片库后,我们便可以从图片库中选择所需图片,进行图片适屏显示或裁剪了。

2.2适屏的实现

  很显然,要将图片以合适的尺寸显示在手机屏幕上,我们首先需要知道手机屏幕的大小。我们可以通过以下两个函数方法来获得手机屏幕的长和宽。

int dw = getWindowManager().getDefaultDisplay().getWidth();//获得手机屏幕的宽度

int dh = getWindowManager().getDefaultDisplay().getHeight();//获得手机屏幕的高度

  获得手机屏幕的长宽值之后,我们便可以以此来对图片的宽度和高度进行适屏匹配了,具体方法如下:

 1         //对图片的宽度和高度进行匹配
 2         //如果大于1表示图片的高度大于手机屏幕的高度
 3         int hRatio = (int)Math.ceil(factory.outHeight / (float)dh);
 4
 5         //如果大于1表示图片的宽度大于手机屏幕的宽度
 6         int wRatio = (int)Math.ceil(factory.outWidth / (float)dw);
 7
 8         if (hRatio > 1 || wRatio > 1) {                                  //需要进行适屏操作
 9             if (hRatio > wRatio) {                                             //图片高度大于宽度
10                     factory.inSampleSize = hRatio;                    //以高度为准
11             } else {                                                                            //图片高度小于宽度
12                     factory.inSampleSize = wRatio;                   //以宽度为准
13                 }
14         }      

2.3裁剪的实现

  如果图片的尺寸不符合我们需求,就需要对图片进行裁剪操作。在裁剪之前,我们需要设置图片的裁剪规格,具体做法如下:

 1     //设置裁剪图片的规格
 2     public Intent getImageClipIntent() {
 3         Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
 4         //实现对图片的裁剪,必须设置图片的属性
 5         intent.setType("image/*");                    //获取任意类型的图片
 6         intent.putExtra("crop", "true");           //滑动选中图片区域
 7         intent.putExtra("aspectX", 1);               //表示剪切框的比例为1:1
 8         intent.putExtra("aspectY", 1);
 9         intent.putExtra("outputX", 80);           //指定输出图片的大小
10         intent.putExtra("outputY", 80);
11         intent.putExtra("return-data", true);
12         return intent;
13     }

  首先,我们通过intent.ACTION_GET_CONTENT(获取内容)来取出图片内容。然后通过intent.setType("image/*")函数方法设置获取图片的类型为任意类型的图片。通过intent.putExtra("crop", "true")函数方法指以滑动形式来选中图片区域。通过intent.putExtra("aspectX", 1)和intent.putExtra("aspectY", 1)函数方法设置了剪切框的比例为1:1。最后通过intent.putExtra("outputX", 80)和intent.putExtra("outputY", 80)函数方法指定了裁剪后的输出图片大小为80*80。 ;

2.4模拟器中加载图片

  为了验证实验效果如何,我们需要在虚拟器上进行简单验证。如果我们的虚拟器中没有图片,我们可以通过豌豆荚或91助手将图片导入到我们的虚拟器的图片库中。

  如何将图片导入到模拟器中,这里就不细述了。不过,有一点需要注意,豌豆荚好像不支持2.2的SDK(不知道是不是真的,观点来自于博文http://blog.it.sohu.com/appreview/2010/06/24/51/),反正我折腾了好久都没成功,最后只好使用91助手轻松搞定。

2.5实例效果

  在本实例中,首先在MainActivity中完成了主页面的布局显示。在主页面中,设置了两个按钮(分别用来选择图片适屏显示和裁剪图片)控件和一个图片视图控件(用来显示从图片库中选择的经过适屏处理后的图片),如图3所示。

图3 主页面

  因为还没有选择要显示的图片,所以图片视图控件暂时为空,没有任何内容。此时,点击“选择图片”,将跳转到手机的图片库界面,如图4所示,这里我向模拟器的图片库中导入了两张不同格式大小的图片:fuwa.png(400*178)和android_logo.jpg(600*450)。

图4 选择图片界面

  此时,如果我们点击选择图片android_logo.jpg,进行显示的话,很显然,该图片的尺寸已经超出了手机屏幕的尺寸(我的模拟器屏幕尺寸为480*800),需要进行适屏操作后再在主页面上进行显示,如图5所示。

图5 适屏显示效果

  可以看到,对图片进行适屏操作后的显示效果如图5所示。

  当我们在主页面上选择“裁剪图片”时,同样会跳转到如图4所示的选择图片界面,供用户选择对哪一张图片进行裁剪,此时选择fuwa.png,对福娃图片进行裁剪,则出现如图6所示的裁剪图片页面。

图6 裁剪图片

  拖动裁剪选择框,可以调整裁剪的区域以及裁剪大小。最后,点击“保存”按钮,就可以将裁剪的图片按照我们之前指定好的裁剪格式(图片大小80*80)输出了,如图7所示。

图7 输出裁剪图片

ImageView实现图片适屏与裁剪相关推荐

  1. Android学习笔记19:ImageView实现图片适屏与裁剪

    在Android中,要将一张图片显示在屏幕上,需要创建一个显示图片的对象,该对象就是ImageView. 1.ImageView常用属性 要对图片进行适屏裁剪操作,首先需要了解ImageView的常用 ...

  2. Android学习笔记19-ImageView实现图片适屏与裁剪

    在Android中,要将一张图片显示在屏幕上,需要创建一个显示图片的对象,该对象就是ImageView. 1.ImageView常用属性 要对图片进行适屏裁剪操作,首先需要了解ImageView的常用 ...

  3. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)...

    1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...

  4. ImageView 控制图片大小

    2019独角兽企业重金招聘Python工程师标准>>> package com.practice.imageviewpic; import android.app.Activity; ...

  5. UI组件之ImageView及其子类(一)ImageView显示图片

    ImageView家族的继承关系如图: ImageView继承自View组件,它的主要功能室显示图片,还可以显示Drawable对象. ImageView直接子类是ImageButton,QuickC ...

  6. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

  7. Java图片流导出图片为黑屏,Matisse预览图片黑屏,Glide内存溢出

    项目中要到图片.视频选择的功能,然后google了一下,找到Matisse,知乎的图片选择框架,用的人还挺多的,果断依赖gradle,然后开始我的踩坑之旅. 首先,框架本身的图片框架glide是v3版 ...

  8. android imageview清空图片,ImageView基本使用

    1. ImageView使用 ImageView是用于在界面上展示图片的一个控件.图片通常都放在以drawable开头的目录下. 1.1 src与background属性 示例: android:id ...

  9. css背景图片全屏显示加居中显示

    css背景图片全屏显示加居中显示,屏幕过大平铺 屏幕过小居中裁剪 div { background:url(/i/bg_flower.gif); background-size:cover; -moz ...

最新文章

  1. java按钮监听休眠_java-休眠监控解决方案
  2. 学院派 实践派 计算机科学与技术,饶旻现场为boss所在企业“挑错”
  3. 网站颜色变黑白的CSS代码,Chrome、火狐、IE
  4. opencv 亮度增强 二
  5. 【Elasticsearch】Elasticsearch 索引生命周期管理
  6. 51单片机c语言教程温度计,单片机课程设计-数字温度计.doc
  7. 开源软件、自由软件和免费软件的区别
  8. 每天学点5G-5G NEF
  9. 机器学习-对线性回归、逻辑回归、各种回归的概念学习
  10. css设置背景图片透明度
  11. 单工,半双工,全双工区别以及TDD和FDD区别
  12. C#做一年小孩做一个口算题生成器
  13. js 移动端 下载 doc文件
  14. WPF TextBlock Trimming
  15. [渝粤教育] 盐城师范学院 高等代数 参考 资料
  16. 春暖花开,共迎未来:开源社顾问委员会第一季度会议顺利召开~
  17. stm32f103HC05蓝牙串口程序和自制手机APP
  18. win11 nvidia驱动无法更新问题解决
  19. linux 笔记本合盖不休眠设置
  20. js中深浅拷贝理解与方法

热门文章

  1. linux读取字符设备-键盘、扫码枪、二维码设备
  2. 谷歌眼镜起死回生:Google Glass企业版第二代问世售价仅999美元
  3. android动态加载背景,Android六种加载动态图的方式(包括动态背景和加载动态图片)之四...
  4. 机器学习正负样本失衡时的评估指标参考,及代码实现
  5. 四机二区域风电场调频
  6. linux安装方舟编译器,华为方舟编译器安装 软件源码地址,华为方舟编译器安装 软件源码地址预约 - 浏览器家园...
  7. 历年六级词汇翻译总结
  8. 英二阅读单词【2010 t2】
  9. 百度输入法开启AI时代,突破方言、中英文混合识别难题
  10. 前端特效【第04期】|果汁混合效果-下