android触碰事件
2016-01-26 14:53
435 查看
OnTouchListener使用
[code]public class ViewActivity extends Activity implements View.OnTouchListener { @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.view_gestrue); LinearLayout ll_context = (LinearLayout) findViewById(R.id.ll_context); ll_context.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: Log.v("-->", "手指碰到屏幕"); break; case MotionEvent.ACTION_MOVE: Log.v("-->", "手指在移动"); break; case MotionEvent.ACTION_OUTSIDE: Log.v("-->", "手指离开view的边界"); break; case MotionEvent.ACTION_UP: Log.v("-->", "手指离开屏幕"); break; case MotionEvent.ACTION_SCROLL: Log.v("-->", "手指在滑动"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.v("-->", "非主手指碰到屏幕"); break; case MotionEvent.ACTION_POINTER_UP: Log.v("-->", "非主手指离开屏幕"); break; } return true;//拦截事件 } }
Tip:MotionEvent常用方法
[code]event.getY();//触碰点获取距离v顶部的距离 event.getRawY();//触碰点获取距离屏幕顶部的距离 event.getPointerCount();//获取触碰手指的个数
GestureDetector使用:
[code]//GestureDetector这个类对外提供了两个接口:OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener。
GestureDetector.OnGestureListener接口:用来通知普通的手势事件,该接口有如下六个回调函数:
1.onDown(MotionEvent e):down事件;2.onSingleTapUp(MotionEvent e):一次点击up事件;在touch down后又没有滑动
(onScroll),又没有长按(onLongPress),然后Touchup时触发。
点击一下非常快的(不滑动)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
3.onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;Touch了还没有滑动时触发(与onDown,onLongPress)比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不滑动
按照onDown->onShowPress->onLongPress这个顺序触发。
4.onLongPress(MotionEvent e):长按事件;Touch了不移动一直Touch down时触发
5.onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;Touch了滑动一点距离后,在ACTION_UP时才会触发参数:e1 第1个ACTION_DOWN MotionEvent 并且只有一个;e2 最后一个ACTION_MOVE MotionEvent ;velocityX X轴上的移动速度,像素/秒 ;velocityY Y轴上的移动速度,像素/秒.触发条件:X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
6.onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法在ACTION_MOVE动作发生时就会触发
抛:手指触动屏幕后,稍微滑动后立即松开
GestureDetector.OnDoubleTapListener接口:用来通知DoubleTap事件,类似于鼠标的双击事件。
1.onDoubleTap(MotionEvent e):在双击的第二下,Touch down时触发 。2.onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);双击的第二下Touch down和up都会触发,可用e.getAction()区分。
3.onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。这个方法不同于onSingleTapUp,他是在GestureDetector确信用户在第一次触摸屏幕后,没有紧跟着第二次触摸屏幕,也就是不是“双击”的时候触发
tip:
[code]//distanceX,是前后两次call的X距离,不是e2与e1的水平距离; 是前后两次call的Y距离,不是e2与e1的垂直距离
使用方法:
1:继承GestureDetector.OnGestureListener2:实例化检测器GestureDetector mDetector = new GestureDetector(ViewActivity.this, this);
3:在ontouch里面回调方法
[code]@Override public boolean onTouch(View v, MotionEvent event) { mDetector.onTouchEvent(event); return true; }
参考链接:
用户手势检测-GestureDetector使用详解
android触控,先了解MotionEvent
相关文章推荐
- Android中调节Activity变亮变暗(屏幕亮度)
- Android 应用开发
- android ios主流浏览器User-Agent
- Android图片上传实现预览效果
- Android 6.0: 动态权限管理的解决方案
- [置顶] android开发之 listview中的item去掉分割线 隐藏分割线
- android 动态设置TextView值,例:金额添加
- Android 自己自定义监听模式套路
- intent的startActivityForResult()方法使用注意事情
- Androidapk 反编译
- Android Studio 无法识别Genymotion插件的解决方法
- [轉]Android Libraries 介紹 - Butter knife
- Android Studio打包APK时出现 is not translated in "en" (English) [MissingTranslation]
- android和iOS平台的崩溃捕获和收集
- 编译基于cent64,android,suse32平台程序
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 发红包android
- Android Glide图片加载框架图片变色变绿解决方法
- Android自定义底部显示对话框
- Android开源项目分类汇总