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. logback 配置详解(一)——logger、root

    1.根节点<configuration>包含的属性 scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件 ...

  2. 关于django访问默认后台admin的时候提示403错误,

    Forbidden (403) CSRF verification failed. Request aborted. You are seeing this message because this ...

  3. Nodejs 之Ajax的一个实例(sql单条件查询&并显示在Browser端界面上)

    1.Broswer端的Ajax <!DOCTYPE html> <html> <head lang="en"> <meta charset ...

  4. tcpdump用法

    http://man.linuxde.net/tcpdump http://www.cnblogs.com/yc_sunniwell/archive/2010/07/05/1771563.html

  5. shell中$0,$?,$!等变量意义

    变量说明:   $$     #Shell本身的PID(ProcessID) $!     #Shell最后运行的后台Process的PID $?     #最后运行的命令的结束代码(返回值) $- ...

  6. springMVC下jsp引用外部js,css等静态资源的解决方法

    直入主题. 1. web.xml对springMVC配置如下: <servlet> <description>Spring MVC配置</description> ...

  7. [android]判断位置服务是否打开

    public boolean isLocationEnabled() { int locationMode = 0; String locationProviders; if (Build.VERSI ...

  8. nginx.conf 解释

    http://snapshot.sogoucdn.com/websnapshot?ie=utf8&url=http%3A%2F%2Fwww.cszhi.com%2F20120513%2Fngi ...

  9. 利用Spring中同名Bean相互覆盖的特性,定制平台的类内容。

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  10. Inverted sentences

    And ever has it been that love knows not its own depth until the hour of separation.  除非临到了别离的时候,爱永远 ...