view类初探(一)
/********************************************************************************************************
 * 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类初探(一)的更多相关文章
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
		
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
 - Thinkphp源码分析系列(九)–视图view类
		
视图类view主要用于页面内容的输出,模板调用等,用在控制器类中,可以使得控制器类把表现和数据结合起来.下面我们来看一下执行流程. 首先,在控制器类中保持着一个view类的对象实例,只要继承自控制器父 ...
 - (转)Qt Model/View 学习笔记 (五)——View 类
		
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
 - PureMVC(JS版)源码解析(九):View类
		
在讲解View类之前,我们先回顾一下PureMVC的模块划分: 在PureMVC中M.V.C三部分由三个单例类管理,分别是Model/View/Controller.PureMVC中另外一个 ...
 - 《Qt编程的艺术》——8.2.1 在Designer中使用View类
		
不幸的是,QDirModel有一个严重的限制:因为view不响应鼠标操作,我们不得不自己建立这些功能.除此之外,每个view中,用户都一次只能选择一个元素.如果你想要允许同时选择多个项目,你也必须自己 ...
 - 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)
		
发布在我的网站 http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1 ...
 - 安卓开发28:自定义View类
		
自定义View类 通过自定义View类,可以自定义复杂的,按照自己需求的控件. 一个简单的例子 mainActivity.java 这个里面就是最普通的代码,但是给自定义的控件加上了一个onclick ...
 - view类的XML属性
		
属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickable setClickable(boole ...
 - Android游戏开发之旅 View类详解
		
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
 
随机推荐
- HTTP之Content-Type
			
前言:HTTP/1.1 HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种. 其中 POST 一般用 ...
 - 《Java 程序设计》第一周学习总结
			
本周因为刚刚接触Linux和码云等等,所以在完成作业的时候遇到很多问题. 首先,在安装Linux没有安装盘片,在盘片安装之后成功建立虚拟机,建立虚拟机后首先要下载jdk,第一次下载时没有选对格式,Li ...
 - django补充
			
通过表名获取app的name models.UserInfo._meta.app_label >>> from repository import models >>&g ...
 - CodeForces632E 神奇的多重背包
			
https://cn.vjudge.net/problem/333897/origin 万万没想到这题表面上是个多重背包,实际上确实是个多重背包 题意 n种物品每种物品有无限个,每个物品有一个价格,现 ...
 - wz
			
chcp 437 monkeyrunner wz.py wz.bat #coding=utf-8 from com.android.monkeyrunner import MonkeyDevice,M ...
 - 3D转换(位置)+过渡+透视
			
效果如图: html代码: <div class="door"> <div class="in"><div> </di ...
 - 5.原型模式(Prototype)
			
依赖关系倒置: 动机(Motivate): 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口. 如何 ...
 - IDEA DEBUG无法启动
			
如题:idea DEBUG无法启动 解决方法: 1.查找出占用进程id 2.杀死进程 cmd 输入 命令: 1.netstat -ano|findstr 4405 2.taskkill -f -pid ...
 - Hadoop — HDFS的概念、原理及基本操作
			
1. HDFS的基本概念和特性 设计思想——分而治之:将大文件.大批量文件分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析.在大数据系统中作用:为各类分布式运算框架(如:map ...
 - HashMap 集合的遍历
			
HashMap 集合的遍历: 两种方式遍历HashMap: //集合hashMap的遍历: //方式一: @Test public void testMethod1(){ HashMap<Str ...