从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

从Maya到Unity:3D模型导入全流程避坑指南(含FBX导出设置)

本文详细解析了从Maya导出3D模型至Unity的全流程,重点剖析了FBX格式作为跨软件协作“中间人”的优劣与核心设置。指南涵盖了Maya端模型清理、FBX导出关键配置(如嵌入媒体、轴转换),以及Unity端的模型、材质、动画导入优化与常见问题(如材质丢失、UV法线错误、骨骼动画错乱)的实战解决方案,旨在帮助3D美术师与技术美术建立稳定、高效的工作流。

lg888的博客 790

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

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

有速度的空气的博客 3425

量子城域网系列(六):从星型到环形,解析QKD网络拓扑的演进与选型

本文深入解析了量子密钥分发网络从星型到环形等主流拓扑结构的演进历程与核心原理。针对量子城域网的实际部署,文章详细对比了星型、总线型和环形拓扑的优缺点,并结合政务云、金融网点等典型应用场景,提供了实战选型指南,帮助读者在物理限制、安全需求与成本效率间找到最佳平衡。

weixin_29197835的博客 111

ComfyUI破限版全中文AI绘画环境搭建与工作流实战指南

节点式工作流是AI绘画领域的核心技术架构,通过将图像生成过程拆分为可配置的模块化节点,实现了对Stable Diffusion模型的精细化控制。其技术原理基于数据流编程范式,每个节点负责特定功能处理,如文本编码、采样器配置和VAE解码等。这种设计在工程实践中的核心价值在于提供了可追溯、可复用的可视化工作流,特别适合需要参数调优和批量生产的商业场景。ComfyUI作为典型的节点式AI绘画工具,在破限版中针对中文用户优化了界面支持和显卡兼容性,显著降低了技术门槛。在实际应用中,结合ControlNet和LoRA

weixin_29038155的博客 446

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

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

xuzhb 800

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 870

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

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

luanxuye的博客 394

【全解析 | PTA】浙大版《Python 程序设计》题目集-第一章

Python浙大版PTA题解

wzhh_的博客 5526

三维模型转变为点云模型的好工具——CloudCompare使用小记

普通三维模型能够直观地展示物体的三维全貌,但是在一些场合需要将三维模型变为相应的点云模型进行展示,而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况,或是使用PCL库中的可执行文件进行转换,这两种操作较为麻烦。笔者最近就遇到了这样一个情况,找到了一个名叫CloudCompare(CC)的软件,能够支持将多种文件格式的三维模型转变为点云模型。以下将本人在使用过程中所使用到的一些操作简记下来供朋友们和将来的自己参考。 一、下载 CloudCompare是一款免费软件,其可以在CloudComp

hdlwyt的博客 2万+

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

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

weixin_33660045的博客 164

Open3D 计算点云的主曲率

本文介绍了点云主曲率计算的方法与实现。通过分析曲面局部几何形状的主曲率(最大和最小方向),基于法线构建投影矩阵和协方差矩阵,使用奇异值分解计算曲率。代码采用Open3D实现,包括点云加载、法线估计、邻域搜索和曲率映射可视化功能。系统支持交互式点云文件选择,将曲率值映射为色彩进行直观展示,为点云处理中的特征提取和分割任务提供基础几何特征。实现过程包含了法线去中心化、协方差矩阵构建和特征值归一化等关键步骤,完整展示了从理论到实践的曲率分析流程。

点云侠的博客 543

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

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

2201_75617725的博客 835

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 722

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

qq_58071132的博客 942

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

m0_52308677的博客 85

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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、付费专栏及课程。

余额充值