Android:你要了解的自定义View基础概念都在这里了!

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移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

跳槽季整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-dzMEfJP3-1710831157714)]

本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值