Android----Matrix-与坐标变换,最新Android开发进阶

Android----Matrix-与坐标变换 创建矩阵之后,就可以使用Matrix提供的方法设置矩阵了,例如上面的代码在ScaleType为时使用设置为居中。当然了,创建并设置好Matrix之后,再使用设置进来也可以达到同样的效果。 阅读详情

前言

  • 首先声明,楼主不是什么大牛,没有多牛逼的技术,只是公司扩招团队,有幸作为技术面试官,面试了这么多人之后的感想,希望对大家有一点点帮助。

// ImageView.java

private Matrix mMatrix;
private Matrix mDrawMatrix;

// 在构造函数中调用
private void initImageView() {
mMatrix = new Matrix();
mScaleType = ScaleType.FIT_CENTER;
}

public void setImageMatrix(Matrix matrix) {
// 省略部分代码…
// 分析点1:参数 matrix 的值拷贝到 mMatrix
mMatrix.set(matrix);
// 分析点2:设置 mDrawMatrix
configureBounds();
// 重绘:触发onDraw(Canvas)
invalidate();
}

// Matrix.java

// 分析点1:参数 matrix 的值拷贝到 mMatrix
public void set(Matrix src) {
if (src == null) {
reset();
} else {
// native 方法
nSet(native_instance, src.native_instance);
}
}

可以看到,mMatrix在ImageView的构造器中就创建了,另外ImageView还提供了setImageMatrix(Matrix)供外部设置。那么mDrawMatrix是在哪里创建的呢?

// ImageView.java

// 分析点2:设置 mDrawMatrix
private void configureBounds() {
// 省略部分代码…
if (ScaleType.CENTER == mScaleType) {
mDrawMatrix = mMatrix;
// 居中
mDrawMatrix.setTranslate(Math.round((vwidth - dwidth) * 0.5f),Math.round((vheight - dheight) * 0.5f));
}
// 省略部分代码…
}

configureBounds()里有多个分支,其中有些分支里将mMatrix赋值给mDrawMatrix,说明两者是同一个对象。

步骤2:设置矩阵

创建矩阵之后,就可以使用Matrix提供的方法设置矩阵了,例如上面的代码在ScaleType为ScaleType

Android----Matrix-与坐标变换,2024网易Android高级面试题总结 UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧! 阅读详情

相关推荐

图文看懂Android的Matrix原理

在Android开发中,矩阵是一个非常强大且有趣的工具

Jason_Lee155的博客 3221

Android----Matrix-与坐标变换,熬夜整理Android高频面试题

当然了,创建并设置好Matrix之后,再使用ImageView#setImageMatrix()设置进来也可以达到同样的效果。 步骤3:使用矩阵进行坐标变换 现在我们看使用mDrawMatrix的地方: // ImageView.java protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 省略部分代码… if (mDrawMatrix != null) { // 分析点1:左乘mDrawMatrix canvas.concat(m

m0_64383184的博客 1194

安卓Matrix基础知识解析

    1、什么是Matrix? 官方的释义:The Matrix class holds a 3x3 matrix for transforming coordinates 翻译一下:矩阵类包含一个用于变换坐标的3x3矩阵 2、如何搞懂Matrix? 我们只关心旋转、位移和缩放,只有透视和错切暂时不理会,有兴趣的自行研究。   我们先测试一下,看看Matrix里面到底存的...

qiantanlong的博客 1374

Android----Matrix-与坐标变换,flutter瀑布流布局插件

iv.setBackgroundColor(0xFF999999.toInt()) iv.scaleType = ImageView.ScaleType.MATRIX iv.setImageResource(R.color.colorAccent) // 图二:设置Matrix,缩放到两倍 val matrix = Matrix().apply { setScale(2F,2F) } iv.imageMatrix = matrix [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img

m0_66684841的博客 359

Android自定义View(三) Matrix的原理解析

Matrix的中文是矩阵的意思,在Android中它起着坐标映射、变换的功能。意思就是说我们在自定义view的时候,有时需要对图表进行缩放、旋转、转移、错切等操作,就需要对图表的坐标进行一定的转换,此时就是Matrix在后台起着转换的作用。Matrix是一个3x3的矩阵,大概长成下面那样子,如图: 先举个例子,为什么要用Matrix进行坐标转换,比如通过Matrix对点A围绕原点旋转30°,...

相忘于江湖 2742

Android图片处理(Matrix,ColorMatrix)

可以用来方面的修改图片中RGBA各分量的值,颜色矩阵以一维数组的方式存储如下:他通过RGBA四个通道来直接操作对应颜色,如果会使用Photoshop就会知道有时处理图片通过控制RGBA各颜色通道来做出特殊的效果。矩阵的运算规则是矩阵A的一行乘以矩阵C的一列作为矩阵R的一行,C矩阵是图片中包含的ARGB信息,R矩阵是用颜色矩阵应用于C之后的新的颜色分量,运算结果如下:颜色矩阵并不是看上去那么深奥,其实需要使用的参数很少,而且很有规律第一行决定红色第二行决定绿色。

m0_60388261的博客 1196

简单介绍Matrix的图形特效

Matrix在android的API中,对该工具类的说明很简单:

月清空的博客 3157

第11章 CustomView Matrix与坐标变换

一、矩阵运算 矩阵的加法与减法: 1.运算规则 设矩阵 则 简言之,两个矩阵相加减,即它们相同位置的元素相加减。 注意:只有对于两个行数、列数分别相等(同型矩阵),加减法运算才有意义,即加减法运算是可行的。 2.运算性质 交换律:A+B=B+A 结合律:(A+B)+C=A+(B+C) 矩阵与数的乘法: 1.运算规则 数乘以矩阵A,就是将数乘以矩阵A中的每一个元素,记为A或A。 特别地,称为的负矩阵。 2.运算性质 结合律: 分配律: 例:已知两个矩阵,,满足矩阵方程A+2X

itzyjr的专栏 927

我的Android进阶之旅------>Android图片处理(Matrix,ColorMatrix)

在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。 这些效果在android中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果。 下面将分别介绍这两个矩阵的用法和相关的函数。 颜色矩阵 android中可以通过颜色矩阵(ColorMatrix类)方面的操作

字节卷动 2023

Android 屏幕适配,什么是adb,ANR,OOM,GPU过度绘制,错切变换,Android Matrix 之setScale,preScale和postScale

什么是adb? Adb是Android Debug Bridge的缩写。它允许开发人员执行远程shell命令。其基本功能是允许和控制来往仿真器端口的通信 。 activity的四个基本状态是什么? Active- 活动在前台; Paused- 活动在后台并仍然可见; Stopped- 活动不可见,被其他活动隐藏; Destroyed- 活动进程被杀死或完成终止; 屏幕适配: ...

ZhangJiqun&191cm&85kg 670

Springboot信息泄露以及heapdump的利用

努力是为了不平庸~安全有些时候是枯燥的,这一次,让我们先人一步,趣学渗透!

LiBai'S BLOG 3万+

别再乱点U盘里的.exe了!手把手教你彻底清除那个伪装成Usb Disk的蠕虫病毒

本文详细介绍了如何识别、清除和预防伪装成Usb Disk的蠕虫病毒。从识别感染迹象到安全备份文件,再到深度清理病毒残留和构建防护策略,提供了一套完整的U盘病毒解决方案。特别提醒用户注意U盘病毒的风险,并养成良好的使用习惯。

weixin_30496999的博客 676

CloudCompare点云变换保姆级教程:从平移、旋转到绕任意点旋转,一次搞定

本文提供CloudCompare点云变换的全面教程,涵盖从基础平移、旋转到绕任意点旋转的高级技巧。通过详细的操作步骤和实战案例,帮助用户掌握点云数据处理的核心技能,提升三维模型对齐和变换的效率与精度。

weixin_28717969的博客 291

chmod: changing permissions of `/u01/app/oracle/product/11.2.0/dbhome_1/bin/extjobO‘: Operation not

oracle 11.2.0.4安装psu 29141056,日志末尾抛出报错 Patching component oracle.ctx, 11.2.0.4.0... Applying sub-patch '29141056' to OH '/u01/app/oracle/product/11.2.0/dbhome_1' Patching component oracle.rdbms, 11.2.0.4.0... Patching component oracle.rdbms.rman, 11.2.0.

m0_37625564的博客 1834

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 436

浏览器缓存导致代码不更新?一招解决部署后用户仍看到旧页面的问题

方案效果适用场景文件名哈希永久解决前端工程化项目HTTP缓存头控制精准控制需服务器权限Meta标签部分生效临时补救方案最佳实践:入口HTML禁用缓存,静态资源使用哈希文件名 + 长期缓存,达到「秒级更新」+「高性能」的平衡!

江拥羡橙的博客 811

本地部署AI应用:基于Google Gemini的banana-prompt快速上手指南

AI应用开发的核心在于将大模型能力集成到实际场景中,其原理是通过API调用将用户输入转化为模型可理解的指令,再由模型生成响应。这一技术价值在于降低AI应用开发门槛,实现数据本地化处理与隐私保护。在工程实践中,开发者常面临环境配置复杂、API集成繁琐等挑战。本文聚焦于使用banana-prompt工具包,通过TypeScript技术栈和npm包管理,快速在Windows本地部署基于Google Gemini API的AI应用。该方案特别适用于ai-prompts提示词工程和content-creation内容

weixin_27188815的博客 318

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 安卓动画之TweenAnimation补间动画详细攻略
下一篇: Android开发框架Collection,Android社招面经分享
普通网友
博客等级 码龄5年 4697粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值