【安杰秀坊】-003- 手势操作OnGestureListener的复用实现

来源:互联网 发布:过期已备案域名 编辑:程序博客网 时间:2024/05/08 00:05

Android系统的APP不同于ios的APP,由于Android手机带有物理返回键,所以在写Android应用的时候不需要硬搬iPhone的开发经验去写一个软返回键,更多的是去使用手势操作,这样既可以增加用户体验,又添加另外一种返回方式。

基本上都是用OnGestureListener来实现手势操作,不过如果开发一个程序中大量的使用的类似于左滑返回的效果时,可以考虑下面这种复用方式:

package com.toobur.app.activity;import com.toobur.app.tools.R;import android.app.Activity;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.GestureDetector.OnGestureListener;public class GestureDetectorActivity extends Activity{private GestureDetector gestureDetector = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);gestureDetector = new GestureDetector(this, new GestureListener());}@Overridepublic boolean onTouchEvent(MotionEvent event){return gestureDetector.onTouchEvent(event);}public class GestureListener implements View.OnTouchListener, OnGestureListener{@Overridepublic boolean onDown(MotionEvent arg0) {return false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float X,float Y) {if(e1.getX() - e2.getX() > 100 && Math.abs(X) > 50){//判断为左滑toAction();}else if(e2.getX() - e1.getX() > 100 && Math.abs(X) > 50){}return false;}@Overridepublic void onLongPress(MotionEvent arg0) {}@Overridepublic boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,float arg3) {return false;}@Overridepublic void onShowPress(MotionEvent arg0) {}@Overridepublic boolean onSingleTapUp(MotionEvent arg0) {return false;}@Overridepublic boolean onTouch(View v, MotionEvent event) {gestureDetector.onTouchEvent(event);return false;}public void toAction(){finish();overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); }}}
注:上述代码中finish()方法后面的Activity切换效果可以参考上一篇博客中的介绍。

该类的使用方法如下:

package com.toobur.app.function;import android.os.Bundle;import com.toobur.app.activity.GestureDetectorActivity;public class Test extends GestureDetectorActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}}
实现自定义手势类,不需要做任何特殊操作,只需要一个继承就可以大功告成。