ImageView的scaleType详解

1. 网上的误解

不得不说很失望,到网上搜索了几篇帖子,然后看到的都是相互复制粘贴,就算不是粘贴的,有几篇还是只是拿着自己的几个简单例子,然后做测试,这种以一种现象结合自己的猜测便得出结论,其实只是想由不完全归纳得出完全归纳的结果,然而很令人失望,原因是: 数据取样过于片面,只是单纯的测试了一种情况,导致大家对这些帖子相当失望。

2. scaleType存在的形式

1) CENTER

2) CENTER_CROP

3) CENTER_INSIDE

4) FIT_CENTER

5) FIT_END

6) FIT_START

7) FIT_XY

8) MATRIX

3.Google的官方解释以及我的个人分析 

 

type

google官方说明

我的解释

CENTER 

Center the image in the view, but perform no scaling. 

剧中显示,不做缩放

CENTER_CROP 

Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding). 

剧中显示,等比例缩放,两边都大于或等于对示窗口对应的那一边

CENTER_INSIDE 

Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding). 

剧中显示,等比例缩放,两边都小于或等于显示窗口对应的那一边

FIT_CENTER 

Scale the image using CENTER.
CENTER: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. The result is centered inside dst.

剧中显示,等比例缩放,两边至少有一边等于显示窗口对应的那一边,另一边小于或等于显示窗口对应的那一边

FIT_END 

Scale the image using END
END: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. END aligns the result to the right and bottom edges of dst.

图片右下角和窗口右下角对其,等比例缩放,两边至少有一边等于显示窗口对应的那一边,另一边小于或等于显示窗口对应的那一边

FIT_START 

Scale the image using START
START: Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. START aligns the result to the left and top edges of dst.

图片左上角和窗口左上角对其,等比例缩放,两边至少有一边等于显示窗口对应的那一边,另一边小于或等于显示窗口对应的那一边

FIT_XY 

Scale the image using FILL
FILL: Scale in X and Y independently, so that src matches dst exactly. This may change the aspect ratio of the src.

不等比例缩放,x缩放到等于等于显示窗口对应的那一边,y缩放到等于显示窗口对应的那一边

MATRIX 

Scale using the image matrix when drawing. 

 图片左上角和窗口左上角对其,不做缩放处理
4. 数据测试

为了表明测试的准确性,我准备了两组数据,一组是图片的分辨率高于ImageView自身的宽高,另外一组是图片的分辨率低于ImageView自身的宽高,这样才具有测试的完整性。

第一组: 图片的分辨率高于ImageView自身的宽高

原图: 屏幕截图: 尺寸:1080*1920 即1080p的屏幕截图

 

将各组数据分别做显示,为了表示特点,将ImageView的背景设置为黑色,ImageView的大小设置为100dp*100dp

 

\

1

2

3

1

center

centerCrop

centerInside

2

fitCenter

fitEnd

fitXY

3

fitStart

matrix

 

 

咱们逐个开始看

  1. CENTER : 首先将图片放置到了中间,然后能够显示多少,就显示多少,图片不做处理,因而图片只是显示了中间支付宝钱包快牙图标的一部分
  2. CENTERCROP : 同样先将图片放置到了中间,然后开始等比例伸缩图片,直到两边有一边适配了边界,由于图片高度大于宽度,因而首先高度适配了,但是此时宽度还够不着边界,不符合上面表格的要求:高度和宽度要均大于等于对应ImageView的高度和宽度,因而要继续伸缩至宽度达到边界,所以宽度可以显示完整,而高度显示不完整
  3. CENTERINSIDE : 同样现将图片放置到了中间,将图片伸缩(如果图片小于ImageView的宽高,那么是不伸缩的),直到两侧同时小于或者等于图片的边界,由于宽度会先适配,高度后适配,因而两侧会显示出黑色的背景
  4. FIT_CENTER : 将图片放置到ImageView的中间,保持图片的宽高比,图片由小变大一步一步扩大,直到一个方向已经适配,由于高度大于宽度,因而高度会先适配,故两侧会出现黑色的背景
  5. FIT_END :将图片放置到ImageView的右下角,保持图片的宽高比,图片由小变大一部一部扩大,直到一个方向已经适配,高度大于宽度,高度先适配,故左侧出现黑色背景
  6. FIT_XY : 不保持图片的宽高比进行伸缩,从ImageView的中心,由小到大,一部一部扩大,直到两个方向都已经适配
  7. MATRIX : 不熟悉,不做解释 

第二组测试数据: 图片分辨率小于ImageView大小的各种数据 

原图: 分辨率: 165*220 

ImageView大小: 200dp*200dp 

类型以及结果: 

  1. CENTER:    

      2. CENTER_CROP: 同样: 由于会缩放,图片高度大于宽度,因而最终的效果是宽度填充满,而高度上部分显示不出来  

      3. CENTER_INSIDE : 刚才已经提到,如果图片小于屏幕的大小,那么CENTER_INSIDE是不会做缩放的

 

此时可能有人会提出疑问,假如说图片一侧大于屏幕的大小,而另外一侧小于屏幕的大小,那么会怎么处理呢?处理的方式还是要符合原则,最终的结果是两侧都要小于等于屏幕对应的尺寸,就是在ImageView的大小内,显示完整这个图片,并且是按照等比例缩放的

,以这个图片为例:

用Nexus5(分辨率为1080*1920)做测试,假如说ImageView的大小为60dp*60dp,Nexus5下的大小为 : 180px*180px

而图片的大小 :165px*220px,这时图片的高度已经超过了ImageView的高度,所以会将高度缩放到ImageView的大小,因而出现如下的效果

 

     4. FIT_CENTER : 

     5. FIT_END:

     6. FIT_START

     7. MATRIX

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDBI的完整格式是什么?

IDBI:印度工业发展银行 (IDBI: Industrial Development Bank of India) IDBI is an abbreviation of the Industrial Development Bank of India. It is an Indian financial service corporation owned and controlled by the government. In 1964, it was founded…

linux判断内存并释放,linux 内存清理/释放命令

# sync# echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys/vm/drop_cachescache释放:To free pagecache:echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes:echo 2 > /proc/sys/vm/drop_cachesT…

kei注释_KEI的完整形式是什么?

kei注释KEI:克里希纳电气工业有限公司 (KEI: Krishna Electricals Industries Limited) KEI is an abbreviation of Krishna Electricals Industries Limited. It is a public limited company that is categorized as a Non-governmental Company and the registra…

基于嵌入式linux的数码相框的设计,基于Linux NFS的Web数码相框设计

O 引言随着数码相机和互联网的普及,越来越多的家庭拥有自己的媒体库。媒体库中既包含有自己拍摄的影像文件,也有从网络上下载的影像资料。然而展示影像资料的手段单一,主要通过PC来实现。因此未来构建以媒体库为中心的家庭多媒体网络&#xf…

Spark学习

mapreduce RDD 流程示意 Yarn 转载于:https://www.cnblogs.com/ecollab/p/7248306.html

CSS中的resize属性

CSS | 调整属性 (CSS | resize Property) Starting note: 开始说明: We deal with various elements regularly while we are developing a website or a web page and to organize, edit and format those elements is a very crucial task as those elements are…

物联网网关linux带串口,物联网网关|串口转HTTP GET协议

支持和Web服务器通信的物联网网关发布时间:2017-05-10作者:上海卓岚浏览量:55821.概述随着物联网的发展,越来越多的设备需要连接到云端。其中的设备有各类仪表、工业设备、采集设备、传感器,这些设备都以串口(RS232、R…

UML--组件图,部署图

组件图用于实现代码之间的物理结构,详细来说,就是实现代码交互。通过接口,将不同的软件,程序连接在一起。 【理解】 1、组件的定义相当广泛,包含:源码,子系统,动态链接库&#xff0c…

WSFC真实场景仲裁处理

在本篇文章中,老王将从实际应用的角度来为大家讲解下群集仲裁在真实情况下的呈现,以及出现不同点数的节点宕机应该如何处理,在老王本篇文章中以及以后的文章中,我并不会去讲如何去安装一个群集,后面我们也将主要专注于…

SFB 项目经验-12-为某上市企业的Skype for Business购买Godday证书

《要想看Lync 2013升级SFB 2015真实项目经验:请看Lync 项目经验-01-到-Lync 项目经验-10》本系列博文:Lync 项目经验-01-共存迁移-Lync2013-TO-SFB 2015-规划01http://dynamic.blog.51cto.com/711418/1858520 Lync 项目经验-02-共存迁移-Lync2013-TO-SF…

在Linux中制作实用程序(MakeFile)

Hey folks, have you ever used IDEs? Most probably, yes. So whats your favorite one? Geany, CodeBlocks, DevC, Eclipse, NetBeans or something else? 大家好,您曾经使用过IDE吗? 很有可能,是的。 那你最喜欢哪一个呢? G…

c语言单片机彩灯程序设计,用C语言实现键控彩灯系统

源程序:#include "reg51.h"#define uchar unsigned charuchar flag;uchar light,assum;void delay05s(){unsigned char i,j,k;for(i5;i>0;i--)for(j200;j>0;j--)for(k250;k>0;k--);}void delay10ms(void){unsigned char i,j;for(i20;i>0;i--)…

c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...

满意答案xvercjdl32013.10.07采纳率:47% 等级:10已帮助:272人#include #include int cmp(const void* a, const void* b){return *(int*)a > *(int*)b;}int main(){int arr[5][5];int tmp[5];int ct 0;int i,j;printf("input 25 …

智能循迹避障小车C语言程序编写思路,基于单片机的智能小车红外避障循迹系统设计与制作...

余秀玲 余秀娟摘 要:随着科技的高速发展,人们对生活质量的要求越来越高,无人驾驶汽车已经被广为研发和试用,由此智能小车的快速发展也是在情理之中。通过对基于单片机的智能小车的硬件及软件设计分析,实现红外避障循迹…

主板扩展槽图解_子板:扩展到主板

主板扩展槽图解A daughterboard is a circuit board that plugs into and extends the circuitry of the main board called motherboard. A daughterboard is connected directly to the motherboard. Unlike expansion cards, which connect with the motherboard using the …

c语言春考题目,PAT 2017年春考乙级真题(1066. 图像过滤)(C语言)

题目原文:图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。输入格式:输入在第一行给出一幅图像的分辨率&#xf…

NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作

环境: &nbsp&nbspVisual Studio 2010 一、Mindscape.NhibernateModelDesigner安装 &nbsp&nbsp在打开VS2010之后,我们能够在“工具”菜单下找到“扩展管理器,搜索:Mindscape NHibernate Model Designer 下载安装就…

树1 树的同构_检查树是否同构

树1 树的同构Problem statement: 问题陈述: Write a function to detect if two trees are isomorphic. Two trees are called isomorphic if one of them can be obtained from other by a series of flips, i.e. by swapping left and right children of a numbe…

《Android应用开发攻略》——2.2 异常处理

2.2 异常处理 Ian Darwin2.2.1 问题Java有一个精心定义的异常处理机制,但是需要花费一定的时间学习,才能高效地使用而不至于使用户或者技术支持人员感到沮丧。2.2.2 解决方案Java提供了一个Exception层次结构,正确地使用它能够带来相当大的灵…

请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇

MPGankIO 布局篇整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~我们的布局采用5.0之后的新布局控件1.CardViewCardView特别的属性如下:android:cardCornerRadius:在布局中设置…