監聽手指左右滑動屏幕的事件,封裝好了一個類

原文:http://blog.csdn.net/qiantujava/article/details/22639353


左右滑動是智能手機最常用的動作,在此簡單的封裝了一下,以後直接拿來用就可以了。


簡單的只需要幾行就可以了,下面那個類是封裝好了的。

package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);//這裏的xml是一個空白的layout
		
		//需要監聽左右滑動事件的view
		RelativeLayout view = (RelativeLayout) this.findViewById(R.id.layout);
		
		//setLongClickable是必須的
		view.setLongClickable(true);
		view.setOnTouchListener(new MyGestureListener(this));
	}
	
	/**
	 * 繼承GestureListener,重寫left和right方法
	 */
	private class MyGestureListener extends GestureListener {
		public MyGestureListener(Context context) {
			super(context);
		}

		@Override
		public boolean left() {
			Log.e("test", "向左滑");
			return super.left();
		}

		@Override
		public boolean right() {
			Log.e("test", "向右滑");
			return super.right();
		}
	}
}

package com.example.test;

import android.content.Context;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.GestureDetector;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.MotionEvent;

/**
 * 實現監聽左右滑動的事件,哪個view需要的時候直接setOnTouchListener就可以用了
 * @author LinZhiquan
 *
 */
public class GestureListener extends SimpleOnGestureListener implements OnTouchListener {
	/** 左右滑動的最短距離 */
	private int distance = 100;
	/** 左右滑動的最大速度 */
	private int velocity = 200;
	
	private GestureDetector gestureDetector;
	
	public GestureListener(Context context) {
		super();
		gestureDetector = new GestureDetector(context, this);
	}

	/**
	 * 向左滑的時候調用的方法,子類應該重寫
	 * @return
	 */
	public boolean left() {
		return false;
	}
	
	/**
	 * 向右滑的時候調用的方法,子類應該重寫
	 * @return
	 */
	public boolean right() {
		return false;
	}
	
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		// TODO Auto-generated method stub
		// e1:第1個ACTION_DOWN MotionEvent
		// e2:最後一個ACTION_MOVE MotionEvent
		// velocityX:X軸上的移動速度(像素/秒)
		// velocityY:Y軸上的移動速度(像素/秒)

		// 向左滑
		if (e1.getX() - e2.getX() > distance
				&& Math.abs(velocityX) > velocity) {
			left();
		}
		// 向右滑
		if (e2.getX() - e1.getX() > distance
				&& Math.abs(velocityX) > velocity) {
			right();
		}
		return false;
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		gestureDetector.onTouchEvent(event);
		return false;
	}

	public int getDistance() {
		return distance;
	}

	public void setDistance(int distance) {
		this.distance = distance;
	}

	public int getVelocity() {
		return velocity;
	}

	public void setVelocity(int velocity) {
		this.velocity = velocity;
	}

	public GestureDetector getGestureDetector() {
		return gestureDetector;
	}

	public void setGestureDetector(GestureDetector gestureDetector) {
		this.gestureDetector = gestureDetector;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章