天天看點

【安傑秀坊】-003- 手勢操作OnGestureListener的複用實作

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;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		gestureDetector = new GestureDetector(this, new GestureListener());
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event){
		return gestureDetector.onTouchEvent(event);
	}
	
	public class GestureListener implements View.OnTouchListener, OnGestureListener{

		@Override
		public boolean onDown(MotionEvent arg0) {
			return false;
		}

		@Override
		public 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;
		}

		@Override
		public void onLongPress(MotionEvent arg0) {
		
		}

		@Override
		public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
				float arg3) {
			return false;
		}

		@Override
		public void onShowPress(MotionEvent arg0) {
			
		}

		@Override
		public boolean onSingleTapUp(MotionEvent arg0) {
			return false;
		}

		@Override
		public 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{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	
}
           

實作自定義手勢類,不需要做任何特殊操作,隻需要一個繼承就可以大功告成。