使用Matrix进行图形变换来完成图片在屏幕上的全屏显示(屏幕自适应)

简介: Matrix是Android提供的一个矩形工具类,主要是结合其他的API(如Canvas有个使用到Matrix做参数的drawBitmap()方法)来控制图形或者View组件的平移、旋转、缩放和倾斜变换。

MatrixAndroid提供的一个矩形工具类,主要是结合其他的API(如Canvas有个使用到Matrix做参数的drawBitmap()方法)来控制图形或者View组件的平移、旋转、缩放和倾斜变换。这里只对其做一个简要介绍,之所以有此一文,也只为记录在开发过程中曾使用到Matrix解决了一个我曾比较头疼的问题,就是让不同尺寸的图形,如何在不同尺寸的屏幕上全屏且完整的显示,具体的解决方式就是就是通过Matrix可以控制图形缩放的setScale(float sx,float sy)方法来实现的。这个问题或许还有其他的解决方式,如能告知,在此先谢过。

先简单的介绍下Matrix提供的用于控制平移、旋转和缩放的方法:

setTranslate(float dx, float dy):用于控制图形的平移

setSkew(float kx, float ky, float px, float py):控制Matrixpxpy为轴心进行倾斜,其中,kxkyXY方向上的倾斜距离。

setSkew(float kx, float ky):控制Matrix进行倾斜。其中kxkyXY方向上的倾斜距离。

setRoatate(float degrees):控制Matrix进行旋转,degrees为旋转的角度。

setRotate(float degrees, flaot px, float py):设置以pxpy为轴心进行旋转,degrees为旋转的角度。

setScale(float sx, float sy):设置Matrix进行缩放,sxsy控制XY方向上的缩放比例。

setScale(flaot sx, float sy, float px, float py):设置以pxpy为轴心进行缩放,sx/sy控制XY方向的缩放比例。

使用Matrix进行图形变换的步骤也很简单:首先是先得到Matrix对象,然后就是调用Matrix的方法进行设置变换方式,最后便是将这个Matrix对象与Android其他的API共同完成图形变换(比如通过调用CanvasdrawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法将变换后的图形绘制在界面上),这样便是通过Matrix结合其他API完成图形变换的方式了。

这里再简单的介绍下我当时解决的问题的思路,其实很简单,要想将图片完整且全屏的显示在屏幕上,肯定调用的方法就是setScale(float sx, float sy)方法了,关键就是设置setScale()方法中的两个参数,这两个参数主要用于控制缩放比例,都为1.0是表示没有缩放,当为其他数时,便会缩小或者放大相应数值,正是基于这样,可以通过将屏幕的宽高分别比上图片的宽高,然后将这两个比值作为setScale()的两个参数,便可以完整且全屏的显示一张图片了。


也正是基于这种原理,程序界面就可以实现屏幕自适应,当然根据需要,也可以不将程序设为全屏显示,而将程序界面显示为全屏的某指定比例。


当然这种方式实现的图片的全屏显示,图片是有失真的。无失真的屏幕自适应,可以考虑使用draw9patch工具来自己制作。

相关文章
|
6月前
|
存储 调度 开发者
HarmonyOS Next 实战卡片开发 03
本文详细介绍了基于 HarmonyOS Next 的卡片开发实战,涵盖从项目创建到功能实现的全流程。首先通过新建项目和服务卡片搭建基础框架,并设置沉浸式体验优化界面。接着实现了首页轮播图功能,包括申请网络权限、初始化数据和构建轮播组件。随后深入讲解了卡片 id 的处理,涉及获取、返回、持久化存储及移除操作,确保卡片与应用间的高效通信。此外,封装了下载图片工具类,支持卡片发起通知获取网络图片,增强功能扩展性。最后实现了卡片同步轮播功能,使首页与卡片轮播状态保持一致。整个流程注重细节,结合实际案例,为开发者提供了全面的参考。
198 20
HarmonyOS Next 实战卡片开发 03
|
Java API Android开发
19. 【Android教程】进度条 ProgressBar
19. 【Android教程】进度条 ProgressBar
701 4
|
XML Java 开发工具
在Android中使用ProgressBar显示进度
在Android中使用ProgressBar显示进度
1466 2
|
XML Java 数据格式
spring-aop的切入表达式和JoinPoint的使用以及怎么返回通知获取结果和在异常通知中获取异常还有环绕通知
spring-aop的切入表达式和JoinPoint的使用以及怎么返回通知获取结果和在异常通知中获取异常还有环绕通知
366 0
|
Android开发 开发者
Android Material UI控件之ShapeableImageView
Android Material UI控件之ShapeableImageView
607 0
Android Material UI控件之ShapeableImageView
|
Ubuntu
【Ubuntu中截图工具】
【Ubuntu中截图工具】
661 0
|
数据可视化 云计算
阿里云洛神云网络荣获浙江省技术发明一等奖!
7月11日,2021年度浙江省科学技术奖揭晓,阿里云飞天洛神云网络“超大规模高性能云计算网络系统及应用”项目成果荣获浙江省技术发明一等奖。该成果凭借在转发、观测、调控维度的多项技术发明,实现了云网络技术的世界领先性,其中多项技术指标赶超世界顶级科技公司,并受到国际权威评测机构认可。阿里云总裁行癫带领团队参加授奖仪式获奖评语“该项目技术复杂,研制难度大,在虚拟网络高速转发、网络状态实时多尺度观测、大
633 0
阿里云洛神云网络荣获浙江省技术发明一等奖!
|
Linux 网络安全 人机交互
VMware实现PXE+kickstart无人值守安装Centos7系统
VMware实现PXE+kickstart无人值守安装Centos7系统
606 0
VMware实现PXE+kickstart无人值守安装Centos7系统
|
存储 人工智能 运维
为什么他们选择阿里云容器服务 ACK
阿里云容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,整合了阿里云虚拟化、存储、网络和安全能力,助力企业高效运行云端 Kubernetes 容器化应用,支持企业级容器化应用的全生命周期管理。
为什么他们选择阿里云容器服务 ACK
|
并行计算 安全 调度
提速360倍!助力南方电网实现“仿真自由”
近日,为满足新型电力系统建设和运行面临的海量仿真需求,南方电网电力调度控制中心率先将电力仿真软件上云。在基于与阿里云共建的南网调度云平台上,仿真计算提速360倍,有效解决了传统硬件上电力仿真软件“跑不动”的问题,进一步保障电网安全稳定运行。
672 0
提速360倍!助力南方电网实现“仿真自由”