Android中view相关的知识(1)

本文介绍了Android中的View,包括其作为屏幕显示元素的基本概念、坐标系、点击事件处理以及View如何在手机屏幕上呈现的详细过程,涉及窗口管理系统、Window、WindowManager、ViewRoot等关键组件。通过对这些基础知识的学习,有助于开发者更好地理解和自定义View。
摘要由CSDN通过智能技术生成

ps:发现csdn 有个bug,辛辛苦苦写的(1)存为草稿,在写(2),结果写完(2)才发现草稿(2)把(1)覆盖了,卧槽,什么鬼!!只有重新写。。(好像一个浏览器只能存一份草稿,再写新文章,默认打开的就是原来的草稿,坑啊。。。吞了我两篇文章。)
这里写图片描述

什么是View

对用户而言,直观的感受就是呈现在屏幕上的视图对象,它负责屏幕上的一块区域,我们熟知的很多对象都是继承自View的。如:TextView、Buttion、LinearLayout、等等。
对于android开发者来说,View是呈现给用户的最直接的方式,我们探究View的方方面面,从View的坐标系开始,View是怎样呈现到手机屏幕、以及View的绘制过程、View上的触发的事件,等等,学习View的相关知识,对我们自定义View有很大的帮助。

View的基本知识

View的坐标系
了解View之前,我们先来看看跟View有关的方法
这里写图片描述

当然,了解了View有关坐标的方法,我们来上一幅图来具体看看这些方法的含义。
这里写图片描述
对View自身来说,它提供的方法:

getTop:获取到的,是view自身的顶边到其父布局顶边的距离 
getLeft:获取到的,是view自身的左边到其父布局左边的距离 
getRight:获取到的,是view自身的右边到其父布局左边的距离 
getBottom:获取到的,是view自身的底边到其父布局顶边的距离

对点击事件来说,它提供的方法有:

getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离 
getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离 
getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离 
getRawY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离

View呈现在手机屏幕的过程

要了解View的呈现,必然少不了说说窗口管理系统这个大家族。它们分别是view、window、windowMananger、viewRoot,这“四大家族”一同来管理使得view呈现在手机屏幕上。

同样的,我们先来了解下手机屏幕的层次图
这里写图片描述
对Window来说,它本身是一个抽象类,提供了一些对标准UI行为的支持,如背景、标题栏、按键等等,因为是抽象类,所以我们需要的是它的唯一实现的子类PhoneWindow. PhoneWindow通过WindowManager利用ViewRoot将View同PhoneWindow整合到一起,最终将View展示在PhoneWindow上面。

对Window来说,WindowManager就如同一个成功男人背后伟大的女人,它本身就是一个接口,提供了与Window交互的基础功能。如下所示,添加、更新、删除View的方法。

public interface ViewManager{
    public void addView(View view,ViewGroup.LayoutParams.params);
    public void updateView(View view,ViewGroup.LayoutParams.params);
    public void removeView(View view);
}

而WindowManager的实现沿用了C/S结构,WindowManager只是一个代理,实际工作的是WindowManagerService.
WindowManagerService以Session的形式来管理各个Application的窗口,系统启动了多少含有View的应用,就有多少对应的Session.

WindowManager与View之间的交互也不是直接进行的,而是依托一个中间代理叫做ViewRoot,ViewRoot实际上是一个Handler,通过这个Handler实现了两者的消息传递。ViewRoot通知View进行相应界面的绘制,然后调用WindowManager提供的接口,将View添加或更新到Window上面。如下图所示:
这里写图片描述
view呈现到手机屏幕上的大体的思路就如同上面所讲。在下一章节,我们将探究源码,再详细的看看更为细致的呈现过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值