Android 基本事件

原创 2015年07月08日 18:26:23
一、Android基本事件

1.onTouchEvent 触摸事件(GestureDetector手势操作类)

2.onKeyDown 键盘按下

3.onKeyLongPress 长按事件(键盘按下事件长)

4.onKeyUp 键盘松开

5.onKeyMultiple 键盘重复点击

6.onBackPressed 返回事件

NOTE:键盘事件可以通过KeyEvent类获取静态的成员变量(例如:KeyEvent.KEYCODE_BACK返回键监听,判断keyCode和KeyEvent.KEYCODE_BACK的值是否相等);屏幕事件通过event.getAction()获取动作与MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP比较判断是按下还是松开,在按下时获取X和Y坐标,松开时获取X和Y坐标,通过比较可以判断是那个方向滑动,如果是复杂的手势那就要通过GestureDetector类来操作了(个人建议使用这个类)。


二、onTouchEvent和onTouch的区别?(其他同理)

1.onTouch的使用:

public class TActivity extends Activity implements OnTouchListener {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		TextView tv = (TextView) findViewById(R.id.tv);
		tv.setOnTouchListener(this);
	}

	//onTouch的使用
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN://按下
			break;
		case MotionEvent.ACTION_UP://释放
			break;
		}
		return false;
	}	
}

2.onTouchEvent的使用:

public class TActivity extends Activity{
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		return super.onTouchEvent(event);
	}		
}

3.Android相关源码:

public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        onUserInteraction();
    }
    if (getWindow().superDispatchTouchEvent(ev)) {
        return true;
    }
    return onTouchEvent(ev);
}
总结:可以看到onTouchListener的接口的优先级是要高于onTouchEvent的,假若onTouchListener中的onTouch方法返回true,那onTouchEvent是接收不到消息的。 因为Button的performClick是利用onTouchEvent实现,假若onTouchEvent没有被调用到,那么Button的Click事件也无法响应。

三、GestureDetector手势操作类解析

GestureDetector这个类对外提供了两个接口:OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener。

1.实现接口:OnGestureListener
a.onDown() Touch down时触发
b.onShowPress() Touch了还没有滑动时触发(与onDown,onLongPress)比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不 滑动,onDown->onShowPress->onLongPress这个顺序触发。
c.onSingleTapUp() 上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。
点击一下非常快的(不滑动)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
d.onScroll() 在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法在ACTION_MOVE动作发生时就会触发抛:手指触动屏幕后,稍微滑动后立即松开onDown->onScroll->onScroll->onScroll->………->onFling拖动onDown->onScroll->onScroll->onFiling
e.onLongPress() Touch了不移动一直Touch down时触发
f.onFling() 滑动手势事件;Touch了滑动一点距离后,在ACTION_UP时才会触发参数:e1 第1个ACTION_DOWN MotionEvent 并且只有一个;e2 最后一个ACTION_MOVE MotionEvent ;velocityX X轴上的移动速度,像素/秒 ;velocityY Y轴上的移动速度,像素/秒.触发条件:X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

2.实现接口:OnDoubleTapListener
a.onSingleTapConfirmed() 用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。这个方法不同于onSingleTapUp,他是在GestureDetector确信用户在第一次触摸屏幕后,没有紧跟着第二次触摸屏幕,也就是不是“双击”的时候触发。
点击一下非常快的(不滑动)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
b.onDoubleTap() 双击的第二下Touch down时触发
c.onDoubleTapEvent() 通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);双击的第二下Touch down和up都会触发,可用e.getAction()区分。

3.SimpleOnGestureListener类是GestureDetector提供给我们的一个更方便的响应不同手势的类,这个类实现了上述两个接口,我们可以通过继承来重写任意的方法。
NOTE:每个方法都有MotionEvent类的实例作为参数,我们可以通过这个实例和类操作。

这些都是基础,加载一下供初学者学习,让自己记忆更深刻,欢迎大家阅读学习。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android入门——基本事件处理

Android——基本事件处理
  • qq_32696375
  • qq_32696375
  • 2016年10月27日 13:04
  • 252

鼠标事件---显示隐藏的菜单

New Page 28#ssm2 A { FONT-SIZE: 12px; COLOR: #808080; FONT-FAMILY: verdana; TEXT-DECORATION: none}#s...
  • xiexy
  • xiexy
  • 2006年07月28日 23:27
  • 516

Android焦点事件分发与传递机制

Android 焦点事件分发与传递机制
  • zhcswlp0625
  • zhcswlp0625
  • 2017年04月05日 20:45
  • 4600

排列数的计算

1. 序列中存在重复元素 (1)TALLAHASSEE 中字母的全排列数11!3!2!2!2!=831600 \frac{11!}{3!2!2!2!}=831600...
  • lanchunhui
  • lanchunhui
  • 2016年06月23日 16:13
  • 314

随机事件的几个概念

随机试验: 具备以下三个特点则cen
  • iverain
  • iverain
  • 2014年08月15日 17:52
  • 2199

《鼠标事件【onmouser】及Div的显示与隐藏》

概述: 此文件可以初步实现网站中分类导航栏并以鼠标切换内容,后期内容的添加完善,需要您的参与,谢谢。 Web截图: 代码详情: 鼠标事件【...
  • qq_35119220
  • qq_35119220
  • 2017年03月27日 09:52
  • 198

按键分析--APP部分-- OnClickListener事件处理流程

5.3         OnClickListener事件处理流程     5.3.1         OnClickListener注册和使用   应用可以使用SetOnClickList...
  • xiashaohua
  • xiashaohua
  • 2016年02月22日 16:51
  • 1113

基本事件

 onblur:某元素失去焦点后出现,表示用户已经激活另一个元素.onchange:某元素失去焦点,并且从用户最后一次访问以来,其值已经改变.onclick:某元素已经被鼠标点击.ondblclick...
  • APOLLO_TS
  • APOLLO_TS
  • 2007年03月22日 22:19
  • 515

Android各种事件的总结

我们经常使用的监听有: tv.setOnClickListener(null);           tv..setOnLongClickListener(null);            tv....
  • zw904448290
  • zw904448290
  • 2016年12月28日 16:51
  • 738

关于在自定义控件中事件不响应的问题

     今天突然遇到一个问题,就是在一个自定义控件中无法响应事件,遇到这个问题后,马上想到了google,查了好久都没有解决答案无赖只好自己来排除出去.     我的这个自定义的控件中都几个Text...
  • wu2436428
  • wu2436428
  • 2011年04月28日 14:40
  • 2440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 基本事件
举报原因:
原因补充:

(最多只允许输入30个字)