/********************************************************************************************************
* 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. POJ 2987 Firing (最大权闭合图)

    Firing Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12108   Accepted: 3666 Descript ...

  2. Luogu P3868 [TJOI2009]猜数字

    题目链接 \(Click\) \(Here\) 中国剩余定理的板子.小心取模. #include <bits/stdc++.h> using namespace std; const in ...

  3. Nginx+Keeplived双机热备(主从模式)

    Nginx+Keeplived双机热备(主从模式) 参考资料: http://www.cnblogs.com/kevingrace/p/6138185.html 双机高可用一般是通过虚拟IP(漂移IP ...

  4. python中执行shell命令的几个方法小结

    原文 http://www.jb51.net/article/55327.htm 最近有个需求就是页面上执行shell命令,第一想到的就是os.system, os.system('cat /proc ...

  5. 剑指Offer_编程题_9

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloorI ...

  6. MySQL中的主键,外键有什么作用详解

    MySQL中的主键,外键有什么作用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学关系型数据库的同学,尤其在学习主键和外键时会产生一定的困惑.那么今天我们就把这个困惑连根拔起 ...

  7. MyBatis-resultType 几种返回类型

    一.返回集合 1.返回JavaBean集合 public List<MyUser> selectMyUserByNameLike(String name); <!-- resultT ...

  8. spring-mybatis-springMVC 整合

    这是一个spring mybatis springMVC 的整合 里面包括日志,druid,的配置.可以说是一个现成的模板,直接复制下来就能用. 首先是web.xml web.xml 中包括 Spri ...

  9. Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more jquery-1.12.4.js:10208

    ajax执行请求之后返回了数据但是不执行success()函数,原因是返回得数据类型不是ajax请求中设定的:dataType:"json",因为是一个Map<Object, ...

  10. HDU - 6357 Hills And Valleys(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 ...