android中处理各种触摸事件的方法浅谈
Android里有两个类
android.view.GestureDetector
android.view.GestureDetector.SimpleOnGestureListener
(另外android.widget.Gallery好像是更牛x的OnGestureListener)
1)
新建一个类继承SimpleOnGestureListener,HahaGestureDetectorListener
可以实现以下event事件。
booleanonDoubleTap(MotionEvente)
解释:双击的第二下Touchdown时触发
booleanonDoubleTapEvent(MotionEvente)
解释:双击的第二下Touchdown和up都会触发,可用e.getAction()区分。
booleanonDown(MotionEvente)
解释:Touchdown时触发
booleanonFling(MotionEvente1,MotionEvente2,floatvelocityX,floatvelocityY)
解释:Touch了滑动一点距离后,up时触发。
voidonLongPress(MotionEvente)
解释:Touch了不移动一直Touchdown时触发
booleanonScroll(MotionEvente1,MotionEvente2,floatdistanceX,floatdistanceY)
解释:Touch了滑动时触发。
voidonShowPress(MotionEvente)
解释:Touch了还没有滑动时触发
(与onDown,onLongPress比较
onDown只要Touchdown一定立刻触发。
而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。
所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。
)
booleanonSingleTapConfirmed(MotionEvente)
booleanonSingleTapUp(MotionEvente)
解释:上面这两个函数都是在touchdown后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。
点击一下非常快的(不滑动)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
2)在view的新建一个GestureDetector的对象。
构造函数里
gestureDetector=newGestureDetector(newHahaGestureDetectorListener());
然后在View的onTouchEvent里以下这样用,就可以在刚才1)弄的事件里写自己的代码了。
@Override
publicbooleanonTouchEvent(MotionEventevent){
gestureDetector.onTouchEvent(event);
}
mTouchListener=newOnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
//TODOAuto-generatedmethodstub
floatx=event.getXPrecision()*event.getX()+event.getX();
floaty=event.getYPrecision()*event.getY()+event.getY();
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
break;
caseMotionEvent.ACTION_MOVE:
mTouchTimes++;
if(mTouchTimes>TOUCH_TIMES){
//根据方向计算角度
if(mCurrentOrientation==DeviceOrientation.Landscape){
mAngle=Math.toDegrees(Math.atan2(y-480/2,x))+90;
}else{
mAngle=-Math.toDegrees(Math.atan2(y-480/2,320-x))+90;
}
Log.w("angle","mangle:"+mAngle);
}
break;
caseMotionEvent.ACTION_UP:
if(mTouchTimes>TOUCH_TIMES){
}else{
}
mTouchTimes=0;
break;
default:
break;
}
returntrue;
}
};
mView.setOnTouchListener(mTouchListener);
相关文章
- Android面试题总结【完整详细版本”一”】(含答案)
- android bindservice方法,Android bindservice方法返回false
- android onresume方法,Android onActivityResult()和onResume()的执行顺序
- android autosize原理,Android屏幕适配头条:autosize的原理
- android deeplink流程,Android Deeplink探究[通俗易懂]
- Android中的shell循环命令
- iphone4装android,iPhone4可安装Android实现双系统启动.pdf
- Android触摸屏事件派发机制详解与源码分析三(Activity篇)
- android toast点击事件_android生命周期七种方法
- android触摸屏事件,Android Touch事件分析
- android调用相册并显示图片_Android获取相册列表
- android library 使用switch 问题
- Android 图表开发开源库MPAndroidChart
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 一 )
- 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 )
- 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )
- 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
- 【错误记录】Android Studio 编译报错 ( Execution failed for task ‘:APP_MIDI:lintVitalRelease‘. )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( You must define ANDROID_NDK before starting. | 下载指定版本 NDK )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
- 【Android UI】贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )
- android viewgroup事件分发机制详解手机开发
- Android模块化、组件化、插件化区别详解手机开发
- Office手机版下载 微软Android Office正式发布下载
- 使用Android实现连接MySQL数据库:实现快速数据交互与管理(android连接mysql数据库)
- Android学习笔记(一)环境安装及第一个helloworld