Touch事件在Android开发过程中会经常遇到,尤其在自定义UI控件的时候。之前也一直在学习和总结事件,学习事件传递机制、识别手势、拦截、分发等,也写了一些总结但是都感觉比较乱,没有形成系统没有一个头绪都是东一点西一点的,当然也查了很多资料看了一些书自定义了几个控件,在整理之前的总结的时候突然想到干脆从我接触Android事件到之后一点点发现和学习的过程来总结Android Touch 事件,这样自下而上的整理,可以系统的对学习到的相关知识进行整理查漏补遗,也能帮助自己发现是否还有认知上的错误。
以下先列举个人学习事件先后接触的知识:
1. 各种事件设置方法与接口(例如:setOnClickListener )
2. 各种事件原理(onTouchEvent 与方法传递的参数MotionEvent)
3. 各种手势(例如:滚动、Fling、轻触等)
4. 事件的分发(dispathTouchEVent)
5. 事件拦截(onInterceptTouchEvent)
6. 事件传递机制
。。。。。。
先来看看第一个接触的知识点把,其他的之后慢慢总结。最早写过Hello World之后,紧接着学习和实践的demo就是onClickListener,设置一个按钮点击之后会触发其中的代码,通常是弹出一个Toast或者打印一个LOG。下面先从一个简单的与Hello World同级别简单Demo的例子来开始事件的学习旅程。
一、点击事件例子
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View view = getWindow().findViewById(R.id.touch_one); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击图片", Toast.LENGTH_SHORT).show(); } }); }
很简单那的一个小demo代码也没有几行,先来看看下面的效果图:
调用View.setOnClickListener,之后传递一个View.OnClickListener的内部类,其中就一句弹出一个Toast显示文字“点击图片”。
从上面效果图上可以看出,只要点击中间的图片就会弹出“点击图片”文字,说明只要使用setOnClickListener当在视图上点击的时候,都会触发执行其内部类的代码。
二、View的事件整理
先学习了一个点击事件,接着查一下Andorid View都提供了哪些事件相关的方法,这些方法有一个规律都是以setOn开头,通过官网View类的文档或者在Eclipse等IDE中在View.setOn都是显示出以下方法
setOnClickListener setOnLongClickListener setOnTouchListener setOnKeyListener setOnFocusChangeListener setOnCreateContextMenuListener
会发现有6个相关方法,其中第一个是当前例子中使用的setOnClickListener点击事件监听、setOnLongClickListener从名字上可以看出是长按事件的监听、setOnTouchListener是Touch 事件的监听,仅有这三个方法从名字上来说跟事件有关。
点击事件这个引子触发,之后再来分析下Android 源码是何时如何触发执行setOnClickListener内部类的,并且如何判断当前的操作点击行为?
下一篇文章《Touch事件学习 2 触发点击事件的地方》,从Andorid源码角度查找何处触发执行的点击事件。