Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸
实验方法,先找一张不规则大图,尺寸:1024pix(宽) X 1465pix(高),原图如图:
然后特意设置一个ImageView宽高均为600pix。观察不同scaleType配置下,Android对原图的裁剪缩放效果。左侧为代码,右侧为缩放和裁剪效果。
(1)android:scaleType="fitXY"
可见是铺面整个ImageView进行拉伸缩放。不对原图进行裁剪,仅仅缩放。
(2)android:scaleType="center"
这种情况下,要对原图裁剪,以图片中心为基准,以中心向四周出发,裁剪原图刚好为600pix X 600pix放到ImageView里面。
(3)android:scaleType="centerInside"
以图片中心为等比例缩放的基准,这种配置会使图片通过等比例放大或缩小一定落入到ImageView里面,缩放直到原图有一个象限(宽或高)触碰到ImageView的宽高为至,当然前提是整个图必须都得缩放到这个ImageView里面。就像本例一样,Android会对原图等比例缩放,缩放后的高度就是ImageView的高度,而宽度则不够,所以两边留空白(蓝色细线区域内即是)。
如果原图宽大与高,那么本例显示的结果是原图缩放后的宽度和ImageView一样宽,由于高度缩放后不够,那么ImageView的高度(上方,下方)就会出现空白。这样的配置没有裁剪,仅是缩放。
(4)android:scaleType="centerCrop"
这种情况下结合了center和centerInside的特性。centerCrop将对原图进行等比例缩放后裁剪,可以看到原图片的顶部和底部已经被裁剪掉,缩放后的图片宽度和ImageView宽度一直,高度上进行剪除掉。
上面提供的原图是一张宽小于高的图。下面再试一张宽比高大的图,1592pix(宽) X 1080Pix(高),原图:
这次设置四个ImageView宽高均为400pix,代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="400px" android:layout_height="400px" android:layout_alignParentLeft="true" android:background="@android:color/holo_blue_bright" android:scaleType="centerInside" android:src="@drawable/img" /> <ImageView android:layout_width="400px" android:layout_height="400px" android:layout_alignParentRight="true" android:scaleType="centerCrop" android:src="@drawable/img" /> <ImageView android:layout_width="400px" android:layout_height="400px" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:scaleType="center" android:src="@drawable/img" /> <ImageView android:layout_width="400px" android:layout_height="400px" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:scaleType="fitXY" android:src="@drawable/img" /> </RelativeLayout>结果如图:
fitXY,center和centerInside比如容易理解,scaleType中比较重要和比较难以理解的是centerCrop,对比本例中两张宽高不相同的图片等比例缩放效果可以总结出来,centerCrop的裁剪和缩放,是在对原图等比例缩放过程中,宽高两个属性谁先触碰到ImageView的宽高就停止缩放,然后剪除另外一侧。比如在缩放过程中,缩放图的高先等于ImageView的高,那么就剪除宽;如果图的宽在缩放过程中先等于ImageView的宽,那么就剪除高。
现在的App在启动时候,会有一个广告或者称之为启动页的图,闪现而过,作为一个过渡的图画,然后进入App内容。这种情况下,可以利用android:scaleType="centerCrop"属性,但是前提是手机屏幕都是瘦长的屏幕(高比宽大),这样Android会把原图的宽和手机屏幕一样宽,但是高的部分Android对它们裁剪截取掉。所以,设计和UI出的图,也要配合着做成高比宽大的图方可。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flutter Engine线程管理与Dart Isolate机制
闲鱼技术-福居本文结合Flutter Engine官方文档讨论了Flutter Engine内的线程管理模式以及Dart Isolate机制。 Flutter 是什么? Flutter简介 Flutter是Google主导开发的高质量高性能移动跨平台UI开发套件。使用Flutter你可以使用Dart语言高效快速开发高质量的跨平台App,同时Flutter还可以可以与现存的Native代码兼容。目前在世界范围内被众多开发者和组织使用,而且它是开源免费的! Flutter优势与前景 目前Flutter拿来比较最多的是Reactive Native,实际上Flutter跟RN有本质的区别。Flutter UI渲染是自己实现,这跟RN JS Bridge的形式有区别。这也是Flutter性能的一个突破点。使用Flutter用开发效率高,运行效率高,
- 下一篇
Appium+Python3+Android入门
前言: Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。 一、环境配置 1、安装Node.js https://nodejs.org/ 2、安装Appium http://appium.io/ 3、安装Android SDK http://tools.android-studio.org/index.php/sdk 4、安装Python-client pip3 install Appium-Python-Client 5、安装Appium-client npm install wd 最后,打开命令行,输入“appium-doctor”命令,提示Appium所需要的各项环境准备情况。 二、服务关键字 Desired Capabilities在启动session的时候是必须提供的。 Desired Capabilities本质上是以key value字典的方式存放,客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。 desired_caps = {} desired_caps['platformName'] =...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长