一基础知识

android的事件处理分为3步。

1)public booleandispatchTouchEvent(MotionEvent ev)这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEventev) 这个方法用来处理TouchEvent

一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP

二事件探析

场景:本想实现ttdt那种滑动页面结束activity的效果,摸索了好久终于实现,流畅效果很满意,但是activity布局上添加其他控件,比如giriView\listView等,会出现等层自己写的那个View获取不到焦点,导致滑动事件失效。

分析:当在顶层View上加其他View,默认情况都是顶层的事件要传给最上面的view处理,导致为处理情况下,我做的效果失效了;

下图为一个正常的View点击效果图:



1、ViewGroup3的dispatchTouchEvent()方法会被调用。
2、ViewGroup3调用ViewGroup2的dispatchTouchEvent()方法。
3、ViewGroup2调用ViewGroup1的dispatchTouchEvent()方法。
4、ViewGroup1会调用View1的dispatchTouchEvent()方法。
5、View1的dispatchTouchEvent()方法调用自己的onTouchEvent()方法。在onTouchEvent方法中处理点击事件。处理完了后会返回一个true给调用它的dispatchTouchEvent()方法。
6、ViewGroup1的dispatchTouchEvent()方法会返回一个true值给ViewGroup2的dispatchTouchEvent()方法。这样一直将则个true值返回到ViewGroup3的dispatchTouchEvent()方法。ViewGroup3在将这个值返回给调用它的方法。这样一个事件分发过程结束。
三问题解决
想到这里,基本上我们就可以利用View的分发拦截机制,将我们需要的Event拦截,不需要的转发。
在自己写的view重写onInterceptTouchEvent()在里面做下操作:
@Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        // TODO Auto-generated method stub        switch (ev.getAction()) {            case MotionEvent.ACTION_MOVE:                mLastDownX = (int) ev.getX();                System.err.println("ACTION_DOWN=" + mLastDownX);                return true;        }        return super.onInterceptTouchEvent(ev);    }

四验证效果
运行程序,看效果,完美实现,流畅滑动,可以达到ttdt效果!

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android(安卓)Wifi模块分析(三)
  7. Android中dispatchDraw分析
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. Android(安卓)libav移植
  2. Menu菜单(二)————利用GridView实现自定
  3. 长按Home键进入程序和从桌面进入程序
  4. 360buy android 首页打开网络监控数据分
  5. 谈谈IPC
  6. Android(安卓)Studio 出现Error:Connecti
  7. Android(安卓)File
  8. Android开发工具--adb的使用
  9. Android 优秀的开源库
  10. Android动态布局,并动态为TextView控件设