Android事件传递
来源:互联网 发布:mac颜色配置文件 编辑:程序博客网 时间:2023/06/07 05:57
自定义View跟Touch事件有关的处理方法主要由三个:
事件从 Activity的dispatchTouchEvent函数开始传递
public boolean dispatchTouchEvent(MotionEvent ev)
ViewGroup拦截事件
public boolean onInterceptTouchEvent(MotionEvent ev)
View事件处理,返回true事件将终止往下传递,以后的UP、DOWN事件都将交由该类处理;返回false事件继续往下传递给其子view
public boolean onTouchEvent(MotionEvent event)
public class MyViewGroup extends ViewGroup { public MyViewGroup(Context context) { this(context, null); } public MyViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { setBackgroundColor(0xFFFF0000); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: Log.i("hfz", "onInterceptTouchEvent ACTION_DOWN:MyViewGroup"); break; case MotionEvent.ACTION_MOVE: Log.i("hfz", "onInterceptTouchEvent ACTION_MOVE:MyViewGroup"); break; case MotionEvent.ACTION_UP: Log.i("hfz", "onInterceptTouchEvent ACTION_UP:MyViewGroup"); break; } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.i("hfz", "onTouchEvent ACTION_DOWN:MyViewGroup"); break; case MotionEvent.ACTION_MOVE: Log.i("hfz", "onTouchEvent ACTION_MOVE:MyViewGroup"); break; case MotionEvent.ACTION_UP: Log.i("hfz", "onTouchEvent ACTION_UP:MyViewGroup"); break; } return super.onTouchEvent(event); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { }}
public class ViewGroupActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viewgroup); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: Log.i("hfz", "dispatchTouchEvent ACTION_DOWN:ViewGroupActivity"); break; case MotionEvent.ACTION_MOVE: Log.i("hfz","dispatchTouchEvent ACTION_MOVE:ViewGroupActivity"); break; case MotionEvent.ACTION_UP: Log.i("hfz","dispatchTouchEvent ACTION_UP:ViewGroupActivity"); break; } return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Log.i("hfz", "onTouchEvent ACTION_DOWN:ViewGroupActivity"); break; case MotionEvent.ACTION_MOVE: Log.i("hfz","onTouchEvent ACTION_MOVE:ViewGroupActivity"); break; case MotionEvent.ACTION_UP: Log.i("hfz","onTouchEvent ACTION_UP:ViewGroupActivity"); break; } return super.onTouchEvent(event); }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.event.MyViewGroup android:layout_width="300dp" android:layout_height="300dp" android:background="#FF0000" /> <com.event.MyViewGroup1 android:layout_width="200dp" android:layout_height="200dp" android:background="#FFFF00" /> <com.event.MyViewGroup2 android:layout_width="100dp" android:layout_height="100dp" android:background="#00FF00" /></RelativeLayout>
view和viewgroup都没有处理事件interceptTouch(return false或true)和onTouch(return false)的情况,后续的MOVE,UP事件将由Activity的onTouchEvent 处理
dispatchTouchEvent ACTION_DOWN:ViewGroupActivityonInterceptTouchEvent ACTION_DOWN:MyViewGroup2onTouchEvent ACTION_DOWN:MyViewGroup2onInterceptTouchEvent ACTION_DOWN:MyViewGroup1onTouchEvent ACTION_DOWN:MyViewGroup1onInterceptTouchEvent ACTION_DOWN:MyViewGrouponTouchEvent ACTION_DOWN:MyViewGrouponTouchEvent ACTION_DOWN:ViewGroupActivitydispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:ViewGroupActivitydispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:ViewGroupActivitydispatchTouchEvent ACTION_UP:ViewGroupActivityonTouchEvent ACTION_UP:ViewGroupActivity
MyViewGroup1处理事件interceptTouch(return false或true)和onTouch(return true)的情况,后续的MOVE,UP事件将由MyViewGroup1的onTouchEvent 处理,同时MyViewGroup将收不到事件
dispatchTouchEvent ACTION_DOWN:ViewGroupActivityonInterceptTouchEvent ACTION_DOWN:MyViewGroup2onTouchEvent ACTION_DOWN:MyViewGroup2onInterceptTouchEvent ACTION_DOWN:MyViewGroup1onTouchEvent ACTION_DOWN:MyViewGroup1dispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:MyViewGroup1dispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:MyViewGroup1dispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:MyViewGroup1dispatchTouchEvent ACTION_MOVE:ViewGroupActivityonTouchEvent ACTION_MOVE:MyViewGroup1dispatchTouchEvent ACTION_UP:ViewGroupActivityonTouchEvent ACTION_UP:MyViewGroup1
0 0
- android 事件传递机制
- android 事件传递机制
- android触摸事件传递
- android事件传递机制
- android 事件传递
- Android触摸事件传递
- Android事件传递机制
- Android 事件传递机制
- android 事件的传递
- Android事件传递机制
- Android中的事件传递
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- android touch事件传递
- sqlite安装与学习
- Makefile 使用总结(个人觉得不错)
- 【追求进步】和为S的两个数字
- 第一个博客
- think python学习心得-(3)条件和递归
- Android事件传递
- Nova Mitaka 版本热迁移变化浅析
- DrawText参数介绍
- Linux学习--rsync+inotify实现数据实时同步
- Android 第六天重置版_Activity
- 12C-OCP升级1z-060-016
- 微信公众平台接口开发-验证机制
- Meta http-equiv属性详解(转)
- mac OS X 安装Tomcat