Android 基本事件

一、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类的实例作为参数,我们可以通过这个实例和类操作。

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

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

时间: 07-07

Android 基本事件的相关文章

Android开发学习之路-基本事件的使用

1.事件的响应方法. setOnClickListener(view.OnClickListener l); setOnFocusChangeListener(view.OnFocusChangeListener l) setOnLongClickListener(view.OnOnClickListener l); setOnTouchListener(view.OnTouchListerner l); 事件响应的三种方式. 第一种方式: final Button Button1 =(Butt

Android实践项目汇报(总结)-修改

天气客户端开发报告 1系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还可以提示穿衣建议.湿度.风向等信息,这样使天气信息更加完善:一种是未来几天天气预报信息,提供未来几天的天气状况,方便用户的出行预判. 1.2非功能需求分析 为了保证客户端能够长期.安全.稳定.可靠.高效的运行,天气客户端应该满足以下的需求: 1)系统处理的准确性和及时性 2)系统的开放性和系统的可扩充性 3

Android自定义RulerView

自定义RulerView 你可以在Github上看到这篇文章以及源码:https://github.com/onlynight/RulerView 如果你想直接使用请看这里的使用方法:https://github.com/onlynight/RulerSurfaceView只需简单几步gradle配置即可使用. 概述 本文主要讲如何继承View实现一个自定义View,然后通过实例RulerView的实现逻辑帮助读者更好的理解自定义View的设计与实现.开讲之前先给博客大神打个广告<Android

【原创】轻量级即时通讯技术MobileIMSDK:Android客户端开发指南

申明:MobileIMSDK 目前为个人维护的原创开源工程,现陆续整理了一些资料,希望对需要的人有用.如需与作者交流,见文章底签名处,互相学习. MobileIMSDK开源工程的代码托管地址请进入 [email protected]:点击进入 MobileIMSDK的Android客户端SDK文档:点击进入 学习交流 讨论学习和资料区:点此进入 推荐 移动端即时通讯交流: 215891622 推荐 bug/建议发送至:[email protected] [写在前面] MobileIMSDK的An

android开发之onCreate( )方法详解

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource d

如何用 Android Studio 导入开源项目以及常见错误的解决办法

声明:这篇文章完全来自这篇文章,感谢大神的相助.这篇文章纯粹是为了备份. 本篇以Github上最热门的MaterialDesign库,MaterialDesignLibrary来介绍怎样使用Android Sudio导入开源项目的,如果你和我一样刚刚从Eclipse转到AS,那本篇文章非常适合你. 如果不引入任何第三方库,不做自动化分渠道打包等操作,那可以在完全不了解Gradle的情况下进行Android项目的开发.但如果要想导入Github上的热门项目,必须首先熟悉Gradle. 1. Gra

Android——调用高德地图API前期准备

1.登陆高德开放平台注册账号http://lbs.amap.com/ 2.创建自己的应用并且添加新key 获取发布版安全码获取方法: 在AndroidStudio的Terminal中编译: 输入如下图: 开发版安全码获取: 开发版获取的另一种方法:(和获取发布版本一样在AndroidStudio的Terminal中编译 只是keystore的路径改成debug.keystore    密钥库口令默认是android) 创建key成功 得到key: 前期准备完成 下一篇文章是开发配置 备忘 ,也希

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

Android Studio 安装及常见问题

今年放假比去年早了一些,就提前回来了.感觉挺爽,结果教研室电脑没有带回来,悲剧是导师让我维护一下以前的项目,只能屁颠屁颠的搞起呀.只能用自己的笔记本搭建android开发环境.由于前阶段听说Android Studio用着爽歪歪,于是尝试在超卡的笔记本上跑Android Studio.哇咔咔,费了九牛二虎之力终于将Android Studio玩转了.先上个图,快过年了,祝大家新年快乐! Android官网也开始推广Android Studio了,以前官网好像提供Eclipse和ADT打包下载,现