Android GUI之View测量】的更多相关文章

在上篇文章(http://www.cnblogs.com/jerehedu/p/4607599.html#gui)中,根据源码探索了View的绘制过程,过程有三个主要步骤,分别为测量.布局.绘制.系统对绘制已经做了很好的封装,我们主要对测量和布局过程进行分析,看一看android是如何对view进行测量和布局的. 根据上篇文章的分析,我们知道在ViewRootImpl的performMeasure方法中,实际上调用了mView.measure(childWidthMeasureSpec, chi…
在上篇文章中,我们通过跟踪源码,我们了解了Activity.Window.DecorView以及View之间的关系(查看文章:http://www.cnblogs.com/jerehedu/p/4607599.html#gui).那么整个Activity的界面到底是如何绘制出来的呢?既然DecorView作为Activity的顶层界面视图,那么整个界面的绘制工作应该从它开始,下面我们继续跟踪源码,看看是不是这样的. Activity在启动过程中会调用主线程ActivityThread中的方法pe…
 Android中的事件分为按键事件和触屏事件,本篇文章将分析View是如何处理Touch事件的.在View中定义了许多触屏事件,比如OnClick.OnLongClick等等,这些事件都是由一次Touch中的动作如ACTION_DOWN.ACTION_MOVE.ACTION_UP组成的. 首先,我们先看一个简单的案例,Activity中只含有一个Button,我们为Button分别绑定了OnClickListener和OnTouchListener,具体代码如下: btnOk.setOnCli…
在清楚了View绘制机制中的第一步测量之后,我们继续来了解分析View绘制的第二个过程,那就是布局定位.继续跟踪分析源码,根据之前的流程分析我们知道View的绘制是从RootViewImpl的performTraversals方法开始的,在此方法中依次调用了performMeasure.performLayout.performDraw等方法进行测量.布局.绘制,那么下面我们就看看则方performLayout中都做了哪些事情,该方法的关键源码如下: private void performLa…
在上篇文章中,我们分析了View的事件处理过程,当然这里的View是指基本的View.当View接收到Touch事件时,首先会调用dispacheTouchEvent方法,在这个方法中会调用OnTouchListener和OnTouchEvent进行具体的事件处理,OnTouchListener优先于OnTouchEvent.如果在OnTouchListener的onTouch方法返回true,则后续的OnTouchEvent不再执行.而在OnTouchEvent根据Touch的动作进行具体的事…
Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道Android 应用程序是怎么创建出来的,大概的流程是 ActivityManagerService -> Zygote -> Fork App, 然后应用程序在ActivityThread 中的进入loop循环等待处理来自AcitivyManagerService的消息.如果一个Android的应用有…
前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而ViewRootImpl则负责渲染视图,它调用了一个performTraveals方法使得ViewTree开始三大工作流程,然后使得View展现在我们面前.本篇文章主要内容是:详细讲述View的测量(Measure)流程,主要以源码的形式呈现,源码均取自Android API 21. 从ViewRoo…
GUI 是任何系统都很重要的一块. android GUI大体分为4大块. 1)SurfaceFlinger 2)WMS 3)View机制 4)InputMethod 这块内容非常之多,但是理解后,可以触类旁通,其实现在主流的系统,包括andorid,ios在构架上,都是有很多相识之处. 我们先来讲SurfaceFlinger 1.OpenGL & OpenGL ES OPenGL ES 是android系统绘画的基础.关于OpenGL部分,可以百度了解下. 先来看一个OpenGL & S…
图解Android - Android GUI 系统 (1) - 概论 图解Android - Android GUI 系统 (2) - 窗口管理系统 图解Android - Android GUI 系统 (3) - Surface Flinger (TBD) 图解Android - Android GUI 系统 (4) - Activity的生命周期 图解Android - Android GUI 系统 (5) - Android的用户输入处理 Android 显示原理简介 深入Android…
Android的GUI系统是Android最重要也最复杂的系统之一.它包括以下部分: 窗口和图形系统 - Window and View Manager System. 显示合成系统 - Surface Flinger 用户输入系统 - InputManager System 应用框架系统 - Activity Manager System. 它们之间的关系如下图所示 只有对这些系统的功能和工作原理有基本的了解,我们才能够解答一些经常萦绕在脑海里的问题,比如说: Activity启动过程是怎样的…
Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: 负责从硬件获取输入,转换成事件(Event), 并分发给Input Dispatcher. Input Dispatcher: 将Input Reader传送过来的Events 分发给合适的窗口,并监控ANR. Input Manager Service: 负责Input Reader 和 Inpu…
自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还需要掌握View常见的回调方法.而对于那些具有滑动效果的自定义View,我们还需要处理View的滑动,如果遇到滑动冲突则需要处理相应的滑动冲突. 下面是View的常见回调方法: 构造方法 onAttach onVisibilityChanged onDetach onFinishInflate on…
-"爹,我要吃糖" -"好哒儿子" -"爹,我要吃包包" - "好哒儿子" - "爹,我要吃串串" - "好哒儿子" - "爹,我要大保健" - (啪啪啪,三耳光) 儿子是一定要听爹话的,那么在Android世界里,是不是这样呢? 今天就来和大家讨论一下 View 父子之间的琐事. 大家都知道,儿子肯定有自己想做的事情,也就是有自己的思想.那么转换到Android的V…
Android中Activity是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当Activity启动时,我们会通过setContentView方法来设置一个内容视图,这个内容视图就是用户看到的界面. PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个.PhoneWindow是Activity和View系统交互的接口.一个PhoneWindow对应一个DecorView跟一个ViewRootImpl,DecorView是…
目标:实现Android中的自定义View,为理清楚Android中的View绘制流程“铺路”. 想法很简单:从一个简单例子着手开始编写自定义View,对ViewGroup.View类中与绘制View相关的方法解析,并最终弄清楚View的绘制流程. View类代表用户界面组件的基本构建块:View在屏幕上占据一个矩形区域,并负责绘制和事件处理:View是用于创建交互式用户界面组件(按钮.文本等)的基础类. ViewGroup是View的子类,是所有布局的父类,是一个可以包含其他View或者Vie…
转自:https://www.cnblogs.com/deman/p/5584198.html 阅读目录 1.OpenGL & OpenGL ES 2.Android的硬件接口HAL 3.Android显示设备:Gralloc &  FrameBuffer 4.FrameBufferNativeWindow 5.Surface GUI 是任何系统都很重要的一块. android GUI大体分为4大块. 1)SurfaceFlinger 2)WMS 3)View机制 4)InputMetho…
Android重点知识--View和ViewGroup与自定义控件 作者:丁明祥 邮箱:2780087178@qq.com 一.基础 ViewGroup 参考资料: Android 手把手教您自定义ViewGroup(一) View参考资料: Android 自定义View (一)系列 1.概念 Android中的View包含用户交互和显示,ViewGroup继承自View,主要充当View的容器. ViewGroup和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,Vi…
Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.getGlobalVisibleRect(rect); //以屏幕 左上角 为参考系的 View.getLocalVisibleRect(rect); //以目标 View 左上角 为参考系 鉴于这一点的区别,View.getLocalVisibleRect(rect) 的 rect.left恒等于 0…
自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常,我们使用自定义View,需要了解最多的除了事件分发,就是View的绘制过程.然而关于View的绘制,涉及到的知识点纷繁复杂,这么多的代码知识,要梳理起来,肯定是先要找个头.那么平常我们用的最多的方法是哪个方法呢?当然是setContentView()! setContentView 首先我们直接在…
Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="MyViewColor" format="color"/> </declare-styleable&…
承接上一篇,上一篇中讲解了实现滑动的第五种方法,如果你还没读过,可点击下面链接: http://www.cnblogs.com/fuly550871915/p/4985482.html 这篇文章现在来讲解最后一种方法,也可以说是实现滑动的终极大招!不过相比之前的方法,实现的过程要复杂一些,但是实现的效果当然也会徇丽多彩! 六.使用ViewDragHelper实现 (1)基础知识 使用ViewDragHelper可以实现多种多样的滑动效果,只要细心处理,足够满足你的各种拖动的需求了.下面来讲解一下…
通过 图解Android - Binder 和 Service 一文中,我们已经分析了Binder 和 Service的工作原理.接下来,我们来简要分析Android 系统里面都有哪些重要的Service, 它们分别完成什么样的功能. Android 大部分的系统Services 都运行在 System Server 这个进程里,用一个简单的方法来看看都有哪些重要的Service, “ps -t | grep <system_server pid>" system 1078 938…
 Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题.通常在Android中使用PopupWindow是从某一个View中触发,为某一个View setOnClickListener,然后在View.OnClickListener中show出创建好的PopupWindow,比如下图右侧的"筛选"部位View,此图为用户点击 筛选 后弹出的PopupWindo…
作用: 基类View有个函数 public void setTouchDelegate(TouchDelegate delegate),给view内部的另一个view设置一个touch代理. 图中view是外部view,它包含tv1,tv2两个内部view, view可以给tv1,tv2设置一个touch矩形区域(图中黄色rect1),rect1以view的左上为原点,当手指在rect1产生touch事件时,会触发tv1,tv2的 touch事件,相当于给tv1,tv2增加了另一个touch区域…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自己定义View之旅.前面已经介绍过一个自己定义View的基础的样例,Android 自己定义View (一),假设你还对自己定义View不了解能够去看看.今天给大家带来一个略微复杂点的样例. 自己定义View显示一张图片,以下包括图片的文本介绍,类似相片介绍什么的,只是不重要,主要是学习自己定义View的使用方法么. 还记得上一篇讲的4个步骤么: 1.自己定…
support.v4 包为我们提供了一个非常实用的滑动控件ViewPager,在使用ViewPager时有一个需要注意的地方: 即: android.support.v4.view.ViewPager.onSaveInstanceState 空指针等等... 错误如下: ... Caused by: java.lang.NullPointerException at android.support.v4.view.ViewPager.onSaveInstanceState(ViewPager.j…
今天在运行部署项目时logcat弹出下列错误: -- ::-/? E/Zygote: v2 -- ::-/? I/libpersona: KNOX_SDCARD checking this -- ::-/? I/libpersona: KNOX_SDCARD not a persona -- ::-/? E/Zygote: accessInfo : -- ::-/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy…
UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器! Android为我们提供了View和ViewGroup的两个子类的集合,提供常用的一些输入控件(比如按钮,图片和文本域等)和各种各样的布局模式(比如线程布局,相对布局,绝对布局,帧布局,表格布局等). 用户界面布局 在你APP软件上的,用户界面上显示…
前几天另一个项目使用RecyclerView控件,引用类库然后继承一切都很顺序 详细:http://www.cnblogs.com/freexiaoyu/p/5022602.html 今天打算将另一个项目的ListView控件也替换成RecyclerView以同样的方式引用了RecyclerView,引用地址请点击上面的链接查看 引用成功后创建类并继承RecyclerView.Adapter只要一继承这个类 pageckage地方就提示错误 "The type android.support.v…
目录 Android - Bottom Navigation View Android - Bottom Navigation View Overview 一直以来,关于Android的底部导航的功能实现的方法一直是各行其道不成规范,使用各种方法的都有 RadioButton TextView ... 在Material Design 中推出了这样的一个控件来解决底部导航栏的不统一的问题,但是这个控件有一点点的问题... 问题所在 现在的效果非常棒... 结果一旦Item的数量超过了3个,就会有…