View的界限

View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下。这四个值可以通过任何View的子类调用getTop()/get...得到。

但是坑爹的是这些不能在生命周期函数里调用,否则都返回0,因为绘制还没完成呢,可以放在button的onclicklistener中。

事件的种类

分为MotionEvent和TouchSlop,分为ACTION_DOWN, ACTION_MOVE, ACTION_UP。

MotionEvent是点击之后的event可以通过getX()/getY()/getRawX()/getRawY()来得到点击的位置,区别是一个是相对当前View的,一个是相对手机屏幕左上角的。

TouchSlop是系统能识别出的最小滑动距离。可以通过

VelocityTracker用开跟踪划动过程中的速度

GestureDetector用来检测用户的单击、滑动、长按、双击行为。

Scroller用来弹性滑动对象。

划动的方式

划动的方式主要有3中,分别是通过View本身提供的scrollTo/scrollBy方法。第二种是通过动画给View施加平移效果。第三种是通过改变view的LayoutParams使得View重新布局从而实现滑动。

第一种,scrollTo/scrollBy只是改变View的内容而不是View本身的位置,View本身的位置是不变的(getScrollX是改变的,但是getTop/getLeft/getBottom/getRight不变)。

有点是操作简单,适合对View的内容进行滑动。

第二种是动画,优点是操作简单,适用于没有交互的view和实现复杂的动画效果。

第三种是改变布局参数,优点是适用于有交互的View,缺点是操作稍微复杂。

事件分发机制

点击事件的分发就是对MotionEvent事件的分发过程,由三个主要的方法共同完成:dispatchTouchEvent(), onInterceptTouchEvent(), onTouchEvent()

只要点击事件传递到了当前view,dispatchTouchEvent方法一定会被调用他们之间的关系可以用下图表示:

    @Override
public boolean dispatchTouchEvent(MotionEvent event) {
boolean consume = false;
if (onInterceptTouchEvent(event)){
consume = onTouchEvent(event);
} else {
consume = child.dispatchTouchEvent(event);
}
return consume;
}

对于ViewLayout来说,处理的顺序是:

MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomLayout-dispatchTouchEvent-ACTION_DOWN
CustomLayout-onInterceptTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomLayout-dispatchTouchEvent-ACTION_UP
CustomLayout-onInterceptTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick

对View来说,处理的顺序是:

MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick

详情请参考:http://blog.csdn.net/lanhuzi9999/article/details/26515421

Android中View的基础知识的更多相关文章

  1. Android中的一些基础知识(三)

    最近在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 在TextView中显示图像(使用< img>标签) 在TextView中显示图片的方法有许 ...

  2. Android中的一些基础知识(二)

    这几天在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细,这里我只是翻译 ...

  3. Android中的一些基础知识(一)

    翻译自这里,并做了部分修改. 什么是Android? Android是为移动设备提供的软件,它包括操作系统.中间件.和一些关键的应用程序.应用程序执行它自己的进程和在Dalvik虚拟机中的实例. An ...

  4. Android中View绘制流程以及invalidate()等相关方法分析

    [原文]http://blog.csdn.net/qinjuning 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简 ...

  5. Android中View绘制流程以及invalidate()等相关方法分析(转载的文章,出处在正文已表明)

    转载请注明出处:http://blog.csdn.net/qinjuning 前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时 ...

  6. Android中View绘制流程以及invalidate()等相关方法分析(转)

    转自:http://blog.csdn.net/qinjuning 前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时真挚地向渴 ...

  7. 源码解析Android中View的measure量算过程

    Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算.布局.绘图的总体机制可参见博文< Android中View ...

  8. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  9. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

随机推荐

  1. 关于 OJ1575的参考题解

    #include <stdio.h>int main(){ int a,b; scanf("%d",&a); b=0; while(a) { b+=a%10; ...

  2. Python中MySQLdb模块的安装

    安装 MySQLdb是Python语言访问mysql数据库的一个模块,如果你不确定自己的Python环境中是否已经安装了这个模块,可以打开Python shell,输入import MySQLdb,如 ...

  3. 组合suan

    /// 求从数组a[1..n]中任选m个元素的所有组合. /// a[1..n]表示候选集,n为候选集大小,n>=m>0. /// b[1..M]用来存储当前组合中的元素(这里存储的是元素 ...

  4. sql连表分页查询(存储过程)

    1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...

  5. 1005. Spell It Right (20)

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...

  6. asp.net mvc4 过滤器的简单应用:登录验证

    直接上代码,不要说话. ASP.NET MVC4过滤器的简单应用:验证登录 [AcceptVerbs(HttpVerbs.Post)] public ActionResult login(FormCo ...

  7. 浅谈C#Socket

    好不容易把socket通信搞懂一点,比较喜欢做笔记,嘿嘿~ 希望共同学习,共同进步! socket通信是C#中非常基础的一个知识点,我这里用到的是基于Tcp协议的socket通信.Tcp会有三次握手连 ...

  8. 关于STM32的抢占式优先级说明。——Arvin

    关于STM32的中断设置.--Arvin 中断 STM32 很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()配置优先级分组方式,会很不理解,尤其是看 ...

  9. codeforces #369div2 B. Chris and Magic Square

    题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等 题目链接:http://codeforces.com/contest/711/problem/B 分析:题目不难,找到要 ...

  10. Java中用ClassLoader载入各种资源(类、文件、web资源)的方法

    lassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. ClassLoader负责载入系 ...