您的位置:首页 > 其它

监听手指左右滑动屏幕的事件,封装好了一个类

2015-08-21 10:03 453 查看
转载自:http://blog.csdn.net/qiantujava/article/details/22639353

在做Activity的左右滑动时,用到了这个连接中的封装类,解决了问题,简洁有效!

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;

}

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