ViewGroup与View的事件分发机制
来源:互联网 发布:淘宝店铺名片上的店名 编辑:程序博客网 时间:2024/05/17 13:12
参考地址:http://blog.csdn.net/reakingf/article/details/52029575
上代码:
首先先创建一个Layout,这个Layout是ViewGroup类型,我这里就用个LinearLayout,因为LinearLayout也是继承自ViewGroup。
ViewGroup在事件分发中主要有三个方法:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent:
1.dispatchTouchEvent:该方法主要是做ViewGroup的事件分发,一般来说不进行处理。
2.onInterceptTouchEvent: 用于事件的拦截向下分发,只存在ViewGroup中。
3.onTouchEvent:该方法主要是触摸事件的处理。
然后创建一个View,这个Layout是View类型,我这里就继承TextView作为实例,因为TextView也是继承自View。
View在事件分发中主要有两个个方法:dispatchTouchEvent、onTouchEvent:
public class MyTextView extends TextView {private String tag = "TestViewDispatchActivity";public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);}public MyTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public MyTextView(Context context) {super(context);}@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {Log.d(tag, "dispatchTouchEvent---->MyTextView");return super.dispatchTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.d(tag, "onTouchEvent---->MyTextView");return super.onTouchEvent(event);}}
测试准备好的布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.example.testdemo.viewdispatchtouch.MyViewGroupLayout android:id="@+id/myLayout" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.testdemo.viewdispatchtouch.MyTextView android:id="@+id/myTextView" android:layout_width="match_parent" android:textSize="18sp" android:textColor="#000000" android:layout_height="wrap_content" android:text="click" /> </com.example.testdemo.viewdispatchtouch.MyViewGroupLayout></LinearLayout>
测试Activity
public class TestViewDispatchActivity extends Activity{private String tag = TestViewDispatchActivity.class.getSimpleName();private MyViewGroupLayout myLayout;private MyTextView myTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test_viewdispatch);initView();}private void initView(){myLayout = (MyViewGroupLayout)findViewById(R.id.myLayout);myTextView = (MyTextView)findViewById(R.id.myTextView);}}
如下图:运行结果可以看出执行顺序
点击click后会先执行viewgroup中的dispatchTouchEvent、onInterceptTouchEvent;
然后会进入到TextView也就是view中执行view的dispatchTouchEvent、onTouchEvent,
由于TextView的onTouchEvent不做处理返回false,所以将事件继续往上一级反馈,将事件继续传递给viewgroup。
0 0
- ViewGroup与View的事件分发机制
- Activity、ViewGroup与View的事件分发机制
- ViewGroup和View的事件分发机制
- Android View 与ViewGroup绘制即事件分发机制
- Andriod View ViewGroup的Touch事件的分发机制
- View,ViewGroup的Touch事件的分发机制
- View,ViewGroup的Touch事件的分发机制
- Andriod 详解View,ViewGroup的Touch事件的分发机制
- View和ViewGroup的事件分发机制详解
- View的事件分发机制(ViewGroup篇)
- Android View、ViewGroup 事件分发机制(一)
- Android View、ViewGroup 事件分发机制(二)
- Android ViewGroup/View 事件分发机制详解
- Android View 和 ViewGroup 事件分发机制
- ViewGroup的事件分发机制
- ViewGroup的事件分发机制
- ViewGroup的事件分发机制
- ViewGroup 的事件分发机制
- 编译最新版webrtc源码
- 搬家,搬到cnblog了
- ReactiveCocoa入门教程:第一部分
- Foundation of Machine Learning 笔记第二部分——Guarantees for Finite Hypothesis Sets in Consistent Case
- JFinal笔记day01
- ViewGroup与View的事件分发机制
- PWM
- Windows2012 要远程登录,你需要具有通过远程桌面服务进行登录的权限.
- leetcode 215. Kth Largest Element in an Array
- 7Liveasia Casino 200% Slots Welcome Bonus
- 内部类、访问权限课堂笔记
- HashMap 多线程处理之 Fail-Fast机制
- d3js的初接触
- HBase1.2.4新版api操作示例