您的位置:首页 > 其它

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对象接受到事件后,会调用接口函数处理。

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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐