从0到1Android自定义View(一)零散基础知识

安卓基础知识之View篇(一):View 必须要知道的基础知识 安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门。同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系,同时给自己日后留个知识参考。 开始的开始 View 是除了安卓四大组件以外用的最多的控件,我们需要利用 Android 内置的 View 控件(TextView、LinearLayout等)完成业务需求,有时甚至需要自定义控件来满足特殊的业务需求。View 还负责与用户的交互(点击、滑动、长按等操作),掌. 阅读详情

Android.jpg

前言

最近做个项目,写了大量的自定义 View ,突然今天就想写一个从 0 到1 的 Android 自定义 View 的文章,为了更好的总结和理解。最后,如果对每周的名企面试题或者本系列文章兴趣的可以关注公众号“于你供读”

目录

从0到1Android自定义View(一) 零散基础知识.png

一、Android 坐标系

1、Android 屏幕坐标

数学中常见的坐标系与 Android 系统上 View 的坐标系是有点差别的,Android 设备中,屏幕的左上角为坐标原点,向右为 x 轴增大方向,向下为 y 轴增大方向。

Android坐标系与数学坐标系的区别.png

2、View 的坐标

View 的坐标是相对父容器而言的


getTop();       //获取子View左上角距父View顶部的距离
getLeft();      //获取子View左上角距父View左侧的距离
getBottom();    //获取子View右下角距父View顶部的距离
getRight();     //获取子View右下角距父View左侧的距离

其中的源代码:

/**
* Top position of this view relative to its parent.
* 相对应父控件的top位置,单位为像素,即头部到父控件的距离
* @return The top of this view, in pixels.
*/ 
@ViewDebug.CapturedViewProperty 
public final int getTop() { 
    return mTop; 
}  

View坐标系.png

3、MotionEvent中 get 和 getRaw 的区别


event.getX();       //触摸点相对于其所在组件坐标系的坐标
event.getY();

event.getRawX();    //触摸点相对于屏幕默认坐标系的坐标
event.getRawY();

getY和getRawY.jpg

二、Android 中的角度与弧度

Android 自定义 View 中,经常会用到一些角度弧度的计算,还有一些数学函数的应用,因此,Android 中的角度和弧度我们也需要了解。

1、角度与弧度的定义

角度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度.

弧度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度.

2、角度和弧度的换算关系

圆一周对应的角度为360度(角度),对应的弧度为2π弧度。

故得等价关系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)

得出公式:

一角度=π/180弧度

一弧度= 180/π角度

注意:

在常见的数学坐标系中角度增大方向为逆时针方向
在默认的屏幕坐标系中角度增大方向为顺时针方向

角度增大的方向.png

三、颜色

1、Java 中定义颜色

xml 定义颜色相信刚接触 Android 的都基本会用的,所以这里就介绍下 Java 中定义颜色,毕竟颜色在自定义 View 中也是必不可少的。


int color = Color.BLACK;     //黑色

int color = Color.argb(127, 255, 0, 0);   //半透明红色

int color  = Color.parseColor("#ffffff");  //白色

2、透明度

透明度也是必不可少的,透明度分为 256 阶(0-255),计算机上用 16 进制表示为(00-ff)。透明就是 0 阶,不透明就是25 5阶,如果 50% 明就是 127 阶(256 的一半当然是 128,但因为是从 0 开始,所以实际上是127 )。

透明度 和 不透明度 是两个概念, 它们加起来是 1,或者 100%

ARGB 中的透明度alpha,表示的是不透明度。

透明度参照表.png

Android自定义View之基础篇——坐标系 1、前言 手机屏幕坐标系与数学坐标系的不同,主要留意y轴方向。 2、手机坐标系 (1)屏幕坐标系/Android坐标系 以屏幕左上角为原点。如图所示,图中绿色边框位置为屏幕所在区域,其中绿色边框左上角为原点。 (2)View坐标系 如图,手机屏幕区域,即上图绿色边框围裹部分,可分为状态栏(即wifi信号、电量显示区)、标题栏、View可绘制区域。其中,标题栏和可绘制区域为我们的... 阅读详情

相关推荐

Cocos Creator v2.0安卓游戏开发实战:从跳箱子到APK上线

Cocos Creator 是一款面向2D游戏的轻量级跨平台引擎,其v2.0版本虽已迭代,但在安卓中低端设备上仍具不可替代的性能优势。该版本基于WebGL1+Canvas双渲染后端,对Android 7–9系统及联发科/骁龙4系SoC适配更优,启动更快、内存更稳。理解其底层资源加载队列、Canvas动态DPR校准、AudioEngine三重降级策略与Box2D轻量化改造,是保障闯关类游戏帧率稳定、音效不丢、触控不延的关键。本文聚焦真实安卓ROM生态(如MIUI、EMUI、ColorOS)下的逐厂适配实践,覆

weixin_33924220的博客 418

自定义View从入门到懵逼系列(上)

传送门系列文章传送门为了以后更快更好地回忆利用此系列内容,在对此系列进行了深入地学习之后对其进行一定的总结,方便日后对自定义View知识的串联。自定义View系列知识点分布:坐标系和角度弧度、Canvas-基本图形、Canvas-图片文字、Canvas-基础绘画辅助、Path基础、PathMeasure、贝塞尔曲线、Matrix原理、Matrix详解、Camera实现3D效果、 Region实现特

戚继光的博客 706

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5721

Android动画:解决通过View.getY()获取初始位置为0的问题

问题描述View.getY()返回为0问题背景用ObjectAnimator进行平移动画的时候需要获取控件的初始位置以及结束位置,比如ObjectAnimator animY = ObjectAnimator.ofFloat(rankRibbon, "Y", rankRibbon.getY(), rankRibbon.getY() + 30);是将rankRibbon向下移动30px 也可以通过t

有速度的空气的博客 3425

Python脚本自动化芯片设计?PyAether实战教程带你玩转EDA

本文通过PyAether实战教程,详细介绍了如何利用Python脚本实现芯片设计自动化。内容涵盖环境搭建、核心对象模型解析,并重点演示了原理图自动生成、参数化单元创建及设计验证流程集成,帮助EDA工程师从重复性手动操作中解放,显著提升设计效率与一致性。

e4f5g6h的博客 1312

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 814

Android自定义View(一)坐标系解读

首先,先认识一下Android的坐标系统,自定义View的时候需要非常清楚坐标系的正负方向,要知道Android系统中的坐标方向和数学中的坐标系方向是不一样的,Android中的屏幕坐标系如下图所示: Android的屏幕坐标系以屏幕左上角为原地(0,0),X轴和Y轴的正方向分别为向右和向下。 这里也说明一下getX/getY和getRawX/get...

xuzhb 800

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 260

android自定义View之零散基础知识

目录 从0到1Android自定义View(一) 零散基础知识.png 一、Android 坐标系 1、Android 屏幕坐标 数学中常见的坐标系与 Android 系统上 View 的坐标系是有点差别的,Android 设备中,屏幕的左上角为坐标原点,向右为 x 轴增大方向,向下为 y 轴增大方向。 Android坐标系与数学坐标系的区别.png 2、View 的坐

luanxuye的博客 394

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4816

YOLOv11 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

本文介绍了分离与增强注意力模块(SEAM)在YOLOv11中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

魔改工程师的博客 1664

android自定义屏幕,Android 自定义view 基础篇(一)

目录从0到1Android自定义View(一) 零散基础知识.png一、Android 坐标系1、Android 屏幕坐标数学中常见的坐标系与 Android 系统上 View 的坐标系是有点差别的,Android 设备中,屏幕的左上角为坐标原点,向右为 x 轴增大方向,向下为 y 轴增大方向。Android坐标系与数学坐标系的区别.png2、View 的坐标View 的坐标是相对父容器而言的ge...

weixin_33660045的博客 164

库存管理系统项目部署方案(基于jdk17)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 6358

【Android】自定义View为什么要处理wrap_content

我们在xml中分别设置和分别对应:可以看到,CustomView的宽度设置和结果相同,这是为什么呢,接下来让我们从源码中寻找答案如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记。

2201_75617725的博客 835

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5768

怀旧版电脑GBC模拟器

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

Bitmap Drawable View 三者之间真正的联系和区别,安卓面试题2024中高级

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。以上分享【我的阿里P7移动开发架构师学习笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到石墨文档了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。

qq_58071132的博客 942

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android自定义View详解,终局之战

前言 今年的寒来得格外慢,眼看年关将近,开年就入春了,但西北季风似乎没有往年的无情。 天气和互联网行业的双重寒冷险些让我翻不过身。 那时的我正处在一个尴尬的境地,工作两年,压力不大,朝九晚五,做着一些在刚入职就一直在做的增删改查。 曾经也找过一些书,一些视频,告诉自己,认真学一学,不然以后的路会越来越难走。但我发现自己已经不是那个在高中孤注一掷为考上大学努力学习的热血少年了。我曾以为自己的实力虽然不济,但认真复习一下找个工作应该不会太困难。好吧,现实狠狠地打了我的脸,年初面试的不断失利,让我明白了自己的不

m0_52308677的博客 85

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2024年安卓最全Android自定义view之模仿登录界面文本输入框(华为云APP),面试的知识

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。

2401_84520401的博客 398

零散知识

setCompoundDrawables 画的drawable的宽高是按drawable.setBound()设置的宽高,所以才有The Drawables must already have had setBounds(Rect) called. 使用之前必须使用Drawable.setBounds设置Drawable的长宽。 setCompoundDrawablesWithIntr

许集贤 343

2024年Android最新效果炸了··Android自定义View实现一个炫酷的时钟,android 基础面试

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

2401_84563179的博客 527

移动开发最新Android自定义View之游戏摇杆键盘实现(一)(1),蚂蚁金服技术面

这里我希望可以帮助到大家提升进阶。Android学习PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。喜欢本文的话,不妨给我点个小赞、评论区留言或者转发支持一下呗~网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

2401_84563254的博客 972

Android源码_View启动的measure、layout、draw

1,已知内容 1,Activity加载View的流程,首先创建出DecorView 2,由ViewRootImpl依次调用DecorView的measure、layout、draw方法 可参考:Android源码_Activity加载View 2,提问 1,measure、layout、draw功能的输入、输出有哪些? 2,measure、layout、draw功能的执行顺序(父与子之...

ylineyline的专栏 251

【Android】【UI】在安卓中使用阿里的IconFont图标库

什么是IconFont IconFont是一套图标库方案,它将常用的图标保存到一个字库文件当中 字库中每个字符的字形,就是图标的外形,这样就能将图标作为一个文字字符来显示 这套方案思路有点奇特,它的主要作用,是方便对图标进行统一打包、分发,这比诸多零散图片要方便 当我们需要使用某个图标时,我们根据Unicode找到对应图标在字库文件当中的位置,然后显示出这个文字即可 具体的使用方法,百度有很多,这里我们主要是套路,怎么让安卓支持这套技术 使用方式 先看结果,实现上虽然有点麻烦,但最终提供给大家使用的API是

天天向上 Up Up Up (*^▽^*) 2952

Android零散

2016-03-13 Android零散 ListView中嵌套GridView 要实现分组列表这样的效果:点击ListView中的分组名称,即展开此分组显示其包含的项目。使用ExpandableList可以实现展开这样的效果,如果对于列表中的每个可点击的标题View需要更多的定制,而不是简单的展开——例如点击全选等,那么可使用ListView嵌套GridView组合实现,ListView中...

weixin_30364325的博客 107

安卓 fragment内显示网站_Feed 流、Fragment懒加载,如何做出高级感的UI?

在Android系统中,界面中所有能看到的元素都是View,所有的UI元素都是View的子类,Android官方为开发者提供了许多丰富的UI控件。一个Android工程师是否高级,最直观的就是看他做的UI高不高级。很多Android开发接到产品的UI需求之后,第一反应就是先回忆在哪里见过这个效果,然后照抄大型app代码。但由于不懂原理,很容易出现各种问题。真正高级的工程师也会使用别人的代...

weixin_39612220的博客 124
上一篇: 薛之谦的《暧昧》:反正现在的感情,都暧昧
下一篇: 滴滴2016校招测评题(建水库问题)
Two_Water
博客等级 码龄12年 573粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值