Androd处理屏幕滑动的一些记录-创新互联
参考的一些博客地址:
十年的东营网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整东营建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“东营网站设计”,“东营网站推广”以来,每个客户项目都认真落实执行。http://blog.csdn.net/vansbelove/article/details/9013731
http://www.eoeandroid.com/thread-178659-1-1.html
http://www.jb51.net/article/35800.htm
scrollBy(int x, int y):将View偏移(x,y),x控制左右方向的偏移,y控制上下方向的偏移。例如:当x>0,y=0时,向右移动x个像素。当x<0,y=0时,向左移动x个像素。整个View的大小不会发生改变,超出部分会被挡住。
scrollTo(int x, int y):将View移动到(x,y)坐标处。整个View的大小不会发生改变,超出部分会被挡住。
Scroller类:主要用于控制滑动过程,是滑动更平滑,相比scrollTo方法不会显得突兀。
VellocityTracker类:主要用于计算触摸速率。用于判断是快速滑动还是慢滑。
onInterceptTouchEvent(MotionEvent ev):--触发拦截触摸事件
定义于ViewGroup中的一个方法,用于拦截触摸事件。此方法默认返回false。
onTouchEvent(MotionEvent ev):--触发触摸事件
定义于View中的一个方法,处理传递到View的手势触摸事件,手势事件类型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL.
ViewGroup中的onTouchEvent方法默认返回false。
View中的onTouchEvent方法默认返回true。
当需要处理一些复杂的事件处理时,可能需要根据情况重写这两个方法来实现需求。
下面引入EOE里面一篇帖子的分析:
记录onInterceptTouchEvent和onTouchEvent调用关系,即各种return true和return false的运行情况。
return true和return false,代表的是是否消费完该事件,也就是该事件是否会继续传递给下层或者上层组件继续处理。return true代表消费完不会继续传递,return false代表没有消费完将会继续传递。
如果没有onInterceptTouchEvent,只考虑onTouchEvent的话,比较容易分析和理解。假如有三层布局结构,linearLayout1,linearLayout2,textView,从前到后是包含的关系。那么下面分情况说明。
1.如果它们的onTouchEvent都返回false的话,DOWN事件会自上而下(textView位于最上层)依次传递,最终都没有消费完此事件,都只会进入onTouchEvent方法一次并且MotionEvent的action为MotionEvent.ACTION_DOWN,move和up等事件不会继续处理。
2.如果textView的onTouchEvent返回true,表示textView消费了此事件,不会传给父组件linearLayout2和 linearLayout1了,并且还会继续处理move和up等事件。
3.linearLayout2和linearLayout1的onTouchEvent返回true和上面的情况一样,都不会继续传给父容器而且本身继续处理move和up等事件。
OK,这种情况还是比较容易理解的。
下面加入onInterceptTouchEvent。
onInterceptTouchEvent只有ViewGroup才会有,用于在进入自身onTouchEvent或者子组件onTouchEvent之前处理事件。注意onTouch是自上而下传递,而onInterceptTouch却是由下而上传递的。来了一个DOWN事件,首先进入的必然是最底层的viewGroup的onInterceptTouchEvent方法,然后根据return的值进入自身或者子组件的onTouch事件,当然如果子组件也是viewgroup的话,在进入子组件的onTouch之前也会进入子组件的onInterceptTouchEvent方法。
下面也分几种情况介绍:
1.当onInterceptTouchEvent返回false时,表示没有消费完此事件,会继续传递个子组件的onTouch继续处理。注意这种情况不会就不会传递给这个ViewGroup自身的onTouch事件处理了。这和onTouch如果返回false,后续的move、up等事件都不会继续处理了可以做同样理解。
2.当onInterceptTouchEvent返回true时,表示消费完此事件,或者说将在此组件上消费该事件。这种情况该事件会传递给ViewGroup自身的onTouch事件去处理,而不会传递给子组件的onTouch方法了。
由此可以总结,onInterceptTouchEvent返回值只是决定了是要把事件传递给自身的onTouch事件还是传递给子组件的onTouch事件。返回false表示没有消费完将传递个子组件的onTouch方法,返回true表示自身消费此事件,将传递给自身的onTouch方法而不会传递给子组件的onTouch方法了。
附件里面是示例参照别人的示例demo,基本就是自己照着敲一遍熟悉熟悉。
附件:http://down.51cto.com/data/2364513另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:Androd处理屏幕滑动的一些记录-创新互联
URL网址:http://azwzsj.com/article/dspiph.html