Android中的UI组件都由View、ViewGroup组成。
3. View类简介
View类是Android中各种组件的基类,如View是ViewGroup基类
View的构造函数:共有4个,具体如下:(注:自定义View必须重写至少一个构造函数)
/ 如果View是在Java代码里面new的,则调用第一个构造函数
public CarsonView(Context context) {
super(context);
}
// 如果View是在.xml里声明的,则调用第二个构造函数
// 自定义属性是从AttributeSet参数传进来的
public CarsonView(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 不会自动调用
// 一般是在第二个构造函数里主动调用
// 如View有style属性时
public CarsonView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//API21之后才使用
// 不会自动调用
// 一般是在第二个构造函数里主动调用
// 如View有style属性时
public CarsonView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
4. View视图结构
对于多View的视图,结构是树形结构:最顶层是ViewGroup。
ViewGroup下可能有多个ViewGroup或View,如下图:
[外链图片转存失败(img-7adRxaFg-1569313524227)(https://upload-images.jianshu.io/upload_images/15679108-b00be1083de973c9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
一定要记住:
无论是measure过程、layout过程还是draw过程,永远都是从View树的根节点开始测量或计算(即从树的顶端开始),一层一层、一个分支一个分支地进行(即树形递归),最终计算整个View树中各个View,最终确定整个View树的相关属性。
5. Android的坐标
Android的坐标系定义为:
-
屏幕的左上角为坐标原点
-
向右为x轴增大方向
-
向下为y轴增大方向
具体如下图:
[外链图片转存失败(img-4CV5IXr9-1569313524228)(https://upload-images.jianshu.io/upload_images/15679108-af4bb15eaa7b2667?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
注:区别于一般的数学坐标系
[外链图片转存失败(img-rc7ieRVt-1569313524229)(https://upload-images.jianshu.io/upload_images/15679108-32da12ecc3b88915?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
6. View位置(坐标)描述
View的位置由4个顶点决定的(如下A、B、C、D)
[外链图片转存失败(img-KYiSgbvw-1569313524238)(https://upload-images.jianshu.io/upload_images/15679108-4900eba68c76e15b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
4个顶点的位置描述分别由4个值决定:(请记住:View的位置是相对于父控件而言的)
-
Top:子View上边界到父view上边界的距离
-
Left:子View左边界到父view左边界的距离
-
Bottom:子View下边距到父View上边界的距离
-
Right:子View右边界到父view左边界的距离
[外链图片转存失败(img-IHer9Gz3-1569313524239)(https://upload-images.jianshu.io/upload_images/15679108-8d5195d1f4bfa212?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
个人建议:按顶点位置来记忆:
-
Top:子View左上角距父View顶部的距离;
-
Left:子View左上角距父View左侧的距离;
-
Bottom:子View右下角距父View顶部的距离;
-
Right:子View右下角距父View左侧的距离。
7. 位置获取方式
View的位置是通过view.getxxx()函数进行获取:(以Top为例)
// 获取Top位置
public final int getTop() {
return mTop;
}
// 其余如下:
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离
与MotionEvent中 get()和getRaw()的区别
//get() :触摸点相对于其所在组件坐标系的坐标
event.getX();
event.getY();
//getRaw() :触摸点相对于屏幕默认坐标系的坐标
event.getRawX();
event.getRawY();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
跳槽季整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-dzMEfJP3-1710831157714)]
本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…