andriod应用程序添加手势识别
2014-08-03 21:11
393 查看
目的:android应用程序添加手势识别,从左向右滑动,弹出对话框。
原理:当手机被触摸时,首先触发一个MotionEvent事件,该事件被OnTouchListener监听,在起OnTouch( View view, MotionEvent event )方法中获得该事件. 该事件中
封装了很多信息,包括手机被触摸的点,被触摸的时间长度,触摸的类型(单击,短按,长按,活动)等。然后该事件通过GestureDetector(手势识别器),传递给OnGestureListener接口处理, 最后OnGestureListener根据封装的信息,做出相应的处理。
实现过程:
Part1: 创建Listener
1. 创建一个接口OnSwipeTouchListener,其实现OnTouchListener接口。
2.在OnSwipeTouchListener中,定义private, GestureDetectorl类型的变量mgestureDetector,用于接受触摸传进来的MotionEvent事件,并且并且为该对象指定一个接口
OnGestureListener()来处理。
2.1 接口OnGestureListener继承类SimpleOnGestureListener
2.2 在接口OnGestureListener中,定义了函数onDown( MotionEvent e)和onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
2.3当MotionEven传进来的时,会调用函数OnFling()处理
2.4在函数OnFling()中,根据手势的不同,调用不同的OnSwipeTouchListener()中的函数onSwipeRight(),onSwipeLeft()onSwipeTop(),
tonSwipeDown()进行处理.
3. OnSwipeTouchListener中,先定义上次四个函数,内容为空。
4.OnSwipeTouchListener中,复写函数onTouch(View arg0, MotionEvent event),将传进来的MotionEven传到前面定义的GestureDetector对象中, 该
GestureDetector对象接受到事件后,会调用接口函数处理。
Part2: 为Activity添加listener, 在onCreat()函数中
1.创建AlertDialog
2. 实例化接口OnSwipeTouchListener, 并且复写对应的函数onSwipeRight(),onSwipeLeft()onSwipeTop(), onSwipeDown().
3. 为Activity添加listener
原理:当手机被触摸时,首先触发一个MotionEvent事件,该事件被OnTouchListener监听,在起OnTouch( View view, MotionEvent event )方法中获得该事件. 该事件中
封装了很多信息,包括手机被触摸的点,被触摸的时间长度,触摸的类型(单击,短按,长按,活动)等。然后该事件通过GestureDetector(手势识别器),传递给OnGestureListener接口处理, 最后OnGestureListener根据封装的信息,做出相应的处理。
实现过程:
Part1: 创建Listener
1. 创建一个接口OnSwipeTouchListener,其实现OnTouchListener接口。
2.在OnSwipeTouchListener中,定义private, GestureDetectorl类型的变量mgestureDetector,用于接受触摸传进来的MotionEvent事件,并且并且为该对象指定一个接口
OnGestureListener()来处理。
2.1 接口OnGestureListener继承类SimpleOnGestureListener
2.2 在接口OnGestureListener中,定义了函数onDown( MotionEvent e)和onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
2.3当MotionEven传进来的时,会调用函数OnFling()处理
2.4在函数OnFling()中,根据手势的不同,调用不同的OnSwipeTouchListener()中的函数onSwipeRight(),onSwipeLeft()onSwipeTop(),
tonSwipeDown()进行处理.
3. OnSwipeTouchListener中,先定义上次四个函数,内容为空。
4.OnSwipeTouchListener中,复写函数onTouch(View arg0, MotionEvent event),将传进来的MotionEven传到前面定义的GestureDetector对象中, 该
GestureDetector对象接受到事件后,会调用接口函数处理。
package com.example.drawer_test; import android.content.Context; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.AdapterView.OnItemClickListener; public class OnSwipeTouchListener implements OnTouchListener { private final GestureDetector mgestureDetector; //手势识别器 public OnSwipeTouchListener(Context Ctx){ mgestureDetector = new GestureDetector( Ctx, new OnGestureListener() ); } public class OnGestureListener extends SimpleOnGestureListener { private static final int SWIPE_THRESHOLD = 100; private static final int SWIPE_VELOCITY_THRESHOLD = 100; public boolean onDown(MotionEvent e) { return true; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { boolean result = false; try { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { onSwipeRight(); } else { onSwipeLeft(); } } } else { if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { if (diffY > 0) { onSwipeBottom(); } else { onSwipeTop(); } } } } catch (Exception exception) { exception.printStackTrace(); } return result; } } public void onSwipeRight() { } public void onSwipeLeft() { } public void onSwipeTop() { } public void onSwipeBottom() { } @Override public boolean onTouch(View arg0, MotionEvent event) { // TODO Auto-generated method stub return mgestureDetector.onTouchEvent(event); } }
Part2: 为Activity添加listener, 在onCreat()函数中
1.创建AlertDialog
2. 实例化接口OnSwipeTouchListener, 并且复写对应的函数onSwipeRight(),onSwipeLeft()onSwipeTop(), onSwipeDown().
3. 为Activity添加listener
<span style="white-space:pre"> </span>//Initialize an AlertDialog
<span style="white-space:pre"> </span>final AlertDialog.Builder mDialogShow = new Builder(this); mDialogShow.setTitle("SwipeTop").setMessage("SwipeTop").setPositiveButton("是", null);
//prepare gesture detector mSwipeTouchListener = new OnSwipeTouchListener(this){ public void onSwipeTop(){ setTitle("SwipeTOP"); mDialogShow.create().show(); }
<span style="white-space:pre"> </span>}; findViewById(R.id.content_frame).setOnTouchListener(mSwipeTouchListener);</span>//添加Listener
相关文章推荐
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- 手势识别(三)2种添加手势方法和如何响应手势
- 多个label添加tap手势和识别点击的是哪个label
- 添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- 基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(2)--手势识别应用
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- swift3.0 collectionView添加长按手势识别
- 扫描识别控件Dynamic .NET TWAIN使用教程:如何将事件添加到应用程序中
- 添加面部跟踪和实时识别到您的Android应用程序
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- Android中添加和识别手势操作
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- 让文件管理器可以识别到应用程序、阅读txt文本的记事本、添加了批量删除等功的android源码Notes
- 给webapp添加侧滑的手势识别
- android之手势添加&识别