Android中view相关的知识
Posted Mario_oo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中view相关的知识相关的知识,希望对你有一定的参考价值。
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呈现到手机屏幕上的大体的思路就如同上面所讲。在下一章节,我们将探究源码,再详细的看看更为细致的呈现过程
以上是关于Android中view相关的知识的主要内容,如果未能解决你的问题,请参考以下文章