目录

1、View和ViewGroup关系

2、坐标系

2.1、Android坐标系

2.2、View坐标系

3、下一节介绍View的滑动


Android体统提供了很多控件用于展示以及和用户交互,比如TextView、Buttom、LinearLayout等。虽然它们的功能十分强大,但有时我们为了追求更便利及更好的效果扔旧需要自己去写自定义VIew。

这就需要我们对View的事件分发及View的工作流程十分熟悉。

1、View和ViewGroup关系

View是Android所有控件的基类,常用的TextView和ImageView是继承自VIew。

ViewGroup是View的组合,它可以包含很多View以及ViewGroup,而包含的ViewGroup又可以包含View和ViewGroup,以此类推,行程一个View树。我们常用的LinearLayout就是一个ViewGroup。ViewGroup也继承自View。

ViewGroup的组织结构图

继承关系

2、坐标系

这里优先提到坐标系,是因为坐标系数据额外知识,但是对于画自定义的View的位置却十分的重要。Android系统又两种坐标系,分别为Android坐标系和View坐标系。如果你连这个View的位置都不知道,怎么去操作View 呢?

2.1、Android坐标系

在Android中,将屏幕左上角的顶点作为坐标原点,原点向右侧是X轴的正防线,向下是Y轴的正方向。使用getRawX()和getRawY()方法获取到坐标值。

Android坐标系

2.2、View坐标系

1. View获取自身的高和宽

View的宽高系统给的方法是getHeight和getWidth,查看源码就会知道是怎么算出来的了,如下:

//右侧边到父的左侧距离 - 左侧边到父的左侧距离
width=getRight()-getLeft();//下边到父的顶部距离 - 上边到父的顶部距离
height=getBottom()-getTop();

2.View的自身坐标

通过如下方法可以获得View到其父控件(ViewGroup) 的距离。

  • getTop () :获取View自身顶边到其父布局顶边的距离。
  • getLeft():获取View自身左边到其父布局左边的距离。
  • getRight () :获取View自身右边到其父布局左边的距离。
  • getBottom () :获取View自身底边到其父布局项边的距离。

3.触摸点

中间的那个圆点就是我们的触摸的点,自定义View伴随的点击时间、滑动时间都是根据你的触摸点来作为起点的。

无论View还是ViewGroup,最总的点击时间都会onTouchEvent(MotionEvent event)方法来处理,比如当前View在onInterceptTouchEvent中拦截,也不洗由当前View的onTouchEvent来处理你所拦截的事件。

MotionEvent也提供了获取焦点坐标的各种方法:

  • getX():获取点击事件距离控件左边的距离,即视图坐标。
  • getY () :获取点击事件距离控件顶边的距离,即视图坐标。
  • getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标。
  • getRawY():获取点击事件距离整个屏幕项边的距离,即绝对坐标。

3、下一节介绍View的滑动

这里先了解了基本的View和ViewGroup,以及坐标知识,脑中大概有了简单的坐标四位。

为了防止篇幅过长,自定义View的滑动板块在二中介绍:Android自定义View(二) - View的滑动

Android自定义View(一) - View与ViewGroup相关推荐

  1. Android 自定义评论回复view

    先上效果图: 一.创建xml 1.android_ceshi_activity <?xml version="1.0" encoding="utf-8"? ...

  2. android自定义LinearLayout和View

    自定义线性布局经常用到: 第一种是在扩展的LinearLayout构造函数中使用Inflater加载一个布局,并从中提取出相关的UI组件进行封装,形成一个独立的控件.在使用该控件时,由于它所有的子元素 ...

  3. android自定义验证码倒计时View

    关于自定义View的构造方法里面的参数的含义可以参考: http://www.cnblogs.com/angeldevil/p/3479431.html 代码: 倒计时类: public class ...

  4. android自定义空的view,ListView android中的自定义空视图

    如果ListView适配器中没有数据,我想显示刷新Button和TextView.我还希望能够向将重新加载列表的按钮添加单击侦听器.以下是我定义当前活动的方式: protected void onCr ...

  5. Android 自定义手势解锁View

    直接上代码了: /****@ClassName:GraphicsView*@author:WYL*@Date:2022/9/29*/ class GraphicsView : View {privat ...

  6. Android自定义一个可伸展的ViewGroup

    /   今日科技快讯   / 近日多家媒体报道,有认证为阿里巴巴集团的员工在职场社交平台称,"88VIP积分将可以免费兑换腾讯视频会员,已经在内部灰度测试,预计双十一前上线".但是 ...

  7. Android 自定义数字角标

    需要显示购物车数量,网上看了一些实现方式,有的是通过把页面view控件作为子view添加的,但是会改变我已有的样式和操作,因此决定自己编写 实现显示角标的功能. 我这里的需求是使用FloatingAc ...

  8. Android自定义View:ViewGroup(三)

    自定义ViewGroup本质是什么? 自定义ViewGroup本质上就干一件事--layout. layout 我们知道ViewGroup是一个组合View,它与普通的基本View(只要不是ViewG ...

  9. android 自定义viewgroup onmeasure,Android进阶——自定义View之View的绘制流程及实现onMeasure完全攻略...

    引言 Android实际项目开发中,自定义View不可或缺,而作为自定义View的一种重要实现方式--继承View重绘尤其重要,前面很多文章基本总结了继承View的基本流程:自定义属性和继承View重 ...

最新文章

  1. 阿里AI摘图像识别竞赛WebVision桂冠,万物识别准确率创世界纪录
  2. Flex Timer 定时器
  3. OSPF详解-2 区域结构
  4. linux命令fdisk
  5. 【PAT】A1074 Reversing Linked List ***
  6. 实现auto_ptr的两种方法
  7. 教你写Bug,常见的 OOM 异常分析
  8. fckeditor 上传图片 php_fckeditor 上传图片乱码的解决方法_PHP教程
  9. java实验6 词频统计_java实训一——词频统计
  10. 加密钱包和借记卡提供商Swipe即将发布V2版本
  11. sqlserver 登录失败——孤立用户
  12. ANSYS2020 R2本地帮助文档,安装教程
  13. 百度云搜索引擎森林战士_纯干货:网盘搜索引擎整理
  14. CMS的碎片解决方案
  15. wps在任务栏取消显示多个文档的预览
  16. 酷奇单车退押金需拨打专线;央行银监会召开网贷整顿会议;Uber隐瞒数据泄露事件丨价值早报
  17. 自然语言处理 cs224n 2019 Lecture 11: ConvNets for NLP
  18. mand-mobile框架:无法执行 ScrollView 下拉刷新/上拉加载
  19. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学CS专业排名2020年
  20. 电视上玩android游戏,如何用u盘下载游戏在android系统电视上玩?

热门文章

  1. android opengl旋转,Android openGl学习笔记二,gl的旋转、位移、放大缩小
  2. 趣图:PHP、前端、DBA、运维工程师招聘会
  3. 用TensorFlow搭建一个万能的神经网络框架(持续更新)
  4. Rethinking IoT
  5. Android应用开发-小巫CSDN博客客户端UI篇,kotlin安卓开发教程视频
  6. 部署WDS服务实现无人值守安装Windows7
  7. 分布式起步:Linux之Ubuntu 20.04.2.0 LTS安装与配置
  8. Rocket-chip-PMP
  9. 神经网络求导与不能求导的情况
  10. 阿尔法状态目睹一个程序员精神失常的经历