/********************************************************************************************************
* view.java源码中的scrollTo(),
* mScrollX是view布局左边缘和view内容左边缘的水平距离
* mScrollY是view布局上边缘与view内容上边缘的垂直距离
* x,y是view左上角的坐标,translationX,为相对于父容器偏移的距离。
* x=left+translationX;y=top+translationY
* getx/gety返回相对当前view左上角的坐标
* getRawx/getRawY返回相对于屏幕左上角的坐标。。
********************************************************************************************************/

public void scrollTo(int x, int y) {
if (mScrollX != x || mScrollY != y) {
int oldX = mScrollX;
int oldY = mScrollY;
mScrollX = x;
mScrollY = y;
invalidateParentCaches();
onScrollChanged(mScrollX, mScrollY, oldX, oldY);
if (!awakenScrollBars()) {
postInvalidateOnAnimation();
}
}
}

/********************************************************************************************************
* view.java源码中的scrollBy(),
* 从源码可以看出两个的不同,scrollto是滑动到指定位置,而scrollBy是指定参数滑动距离
********************************************************************************************************/
public void scrollBy(int x, int y) {
scrollTo(mScrollX + x, mScrollY + y);
}
/***************************************************************************************
*两个方法只能改变view内容的位置不能改变view在布局中的位置,当view是容器的时候,其内部的组件点击事件不会被影响
view布局左边缘在view内容左边缘右边的时候mscrollX为正(内容向左滑为正)
view布局上边缘在view内容上边缘下面的时候mscrollY为正(内容向上滑为正)
*
*
*三种实现view滑动的方式:
* 1.scrollTo()/scrollBy();
这种方式只能滑动view的内容,不能滑动view本身的位置,不会影响内容的点击事件
2.view动画,改变translationX,translationY的方式
这种方式可以做出很复杂的滑动效果但是会影响view内容的交互
android3.0以上的版本可以不影响点击事件。。
3.改变Layoutparams
marginLeft+=xxx实现向右滑。。
**************************************************************************************//*
view的弹性滑动:在一段时间内实现若干小的滑动,比较生硬
**************************************************************************************/、
/*view的事件分发机制
onDispatchTouchEvent()分发事件
onIntercepetTouchEvent()是否拦截该事件,拦截后交给ontouchevent处理
onTouchEvent()处理事件
*某个motionEvent发生,根view的onDispatchTouchEvent()就会被调用,该方法内部的onInterceptTouch()决定是否
* 拦截这个事件,如果拦截就交给onTouchEvent()处理,若果不拦截就交由子view处理,调用子view的OnDispatchTouchEvent()分发。。
*直到被拦截处理。。。。

*某个view继承了OnTouchListener,在发生touchEvent的时候会先调用OnTouchListener中的onTouch()方法,该方法返回一哥boolean值,为true表示
在OnTouchListener中处理,为falsh会调用onTouchEvent()处理事件。由此可见OnTouchListener优先级比onTouchEvent()高,而onTouchEvent中
有onClick()方法,只有经过上述过程最后才能进入这个方法处理点击事件,故而优先级最低。
Activity>>Window>>View--onDispatchTouchEvent(){onInterceptTouchEvent(){onTouchEvent}},
<< << onTouchEvent() << << << <<onTouchEvent.return false
事件的传递过程总是由外向内的。。。。事件先传递给父元素再传递给子元素。。

&&这个过程的相关概念:
事件序列:从ActionDown开始 ---Actionmove---Actionmove--Actionmove。。。Actionup结束
一个事件序列只能被view拦截消耗,意思是说比如某个view的onInterceptTouchEvent()拦截了一个ActionDown事件,那么
后面该序列的其他时间都交由它处理,当然也可以通过特殊方法传递给其他的view处理,但是从本质上来说还是它处理的只是它把球传给其他人,球还是它的。
而一旦ActionDown没有被拦截即onInterceptTouchEvent().return false;该事件序列就不会再处理.onInterceptTouchEvent()默认不拦截,onTouchEvent()默认拦截
******************************************************************************************************************************************/
/*************************************************************************************************************************
*
*
*
************************************************************************************************************************/

view类初探(一)的更多相关文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  2. Thinkphp源码分析系列(九)–视图view类

    视图类view主要用于页面内容的输出,模板调用等,用在控制器类中,可以使得控制器类把表现和数据结合起来.下面我们来看一下执行流程. 首先,在控制器类中保持着一个view类的对象实例,只要继承自控制器父 ...

  3. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  4. PureMVC(JS版)源码解析(九):View类

    在讲解View类之前,我们先回顾一下PureMVC的模块划分:      在PureMVC中M.V.C三部分由三个单例类管理,分别是Model/View/Controller.PureMVC中另外一个 ...

  5. 《Qt编程的艺术》——8.2.1 在Designer中使用View类

    不幸的是,QDirModel有一个严重的限制:因为view不响应鼠标操作,我们不得不自己建立这些功能.除此之外,每个view中,用户都一次只能选择一个元素.如果你想要允许同时选择多个项目,你也必须自己 ...

  6. 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)

    发布在我的网站 http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1 ...

  7. 安卓开发28:自定义View类

    自定义View类 通过自定义View类,可以自定义复杂的,按照自己需求的控件. 一个简单的例子 mainActivity.java 这个里面就是最普通的代码,但是给自定义的控件加上了一个onclick ...

  8. view类的XML属性

    属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickable setClickable(boole ...

  9. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

随机推荐

  1. python模块之os模块

    os模块 用途:调用封装好的方法调用操作系统的功能,处理文件和目录,OS模块不受平台限制. os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用 ...

  2. thinkphp中用ajax对数据库进行操作

    删除和查看详情操作的共同语句:就是怎么显示表? 1.在主体中写表的开头行,想要显示的内容,并且加载数据也要显示的地方也建张表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 & ...

  3. win7,win10系统激活工具下载

    1.关于激活win10: 工具下载地址:链接:https://pan.baidu.com/s/1ZqYbXnp7P8EhE8m0BvVMBA 密码:gklw 这个工具可以激活office,win10 ...

  4. bzoj1061 建图 + 最小费用流

    https://www.lydsy.com/JudgeOnline/problem.php?id=106152 对于一个点对上多个点,不太容易建图的时候,考虑逆向思考 申奥成功后,布布经过不懈努力,终 ...

  5. Storm 使用手册

    一.Storm相关术语: Nimbus: Storm集群主节点,负责资源的分配和任务的调度 Supervisor:Storm集群工作节点,接受Nimbus分配的任务,管理Worker Worker:S ...

  6. JS_一些小方法总结

    1.js中onclick事件同时调用两个方法 用分号隔开即可,比如 <input type="button" onclick="a();b();" val ...

  7. 在Java中如何高效的判断数组中是否包含某个元素

    原文出处: hollischuang(@Hollis_Chuang) 如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Ove ...

  8. tmux用法【常用】

    类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括: Ctrl+b 激活控制台:此时以下按键生效 系统操作 ? 列出所有快捷键:按q返回 d 脱离当前会话:这样可以暂时返回Shell界面, ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)

    前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进入主题介绍 ...

  10. 实惠VPS推荐

    1. Topmain 2. Virmach 3. BanwagonHost  [备用地址1] [备用地址2] 4. HiFormance  (跑路) 5. my.hosteons.com 6. . 以 ...