package com.example.onflyingdemo;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
GestureDetector gestureDetector = null;
private Context ctx;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
/**
* 检测用户手势的方向
*/
gestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() {
// 重写onFling方法
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (velocityY > 0/* e1.getY()-e2.getY()>0 */) { // 向下
Toast.makeText(MainActivity.this, "用户意图方向下 “y>0”", 0).show();
}
if (velocityY < 0) {// 向上
Toast.makeText(MainActivity.this, "用户意图方向上“y<0”", 0).show();
}
if (velocityX > 0) {// 向右
Toast.makeText(MainActivity.this, "用户意图方向右“x>0”", 0).show();
}
if (velocityX < 0) {// 向左
Toast.makeText(MainActivity.this, "用户意图方向左“x<0”", 0).show();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// return super.onTouchEvent(event);
return gestureDetector.onTouchEvent(event);
}
}
上面的代码只是演示有很多问题 移动最小距离我们没有设定 当我用手指向下滑的时候,其实已经向左偏了 这个时候 向左的土司也会被打印出来的;更改为下面的代码:
public class CbMainActivity extends Activity implements android.view.GestureDetector.OnGestureListener
{
//定义手势检测器实例
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.cb_main);
//创建手势检测器
detector = new GestureDetector(this,this);
}
//将该activity上的触碰事件交给GestureDetector处理
public boolean onTouchEvent(MotionEvent me){
return detector.onTouchEvent(me);
}
@Override
public boolean onDown(MotionEvent arg0) {
return false;
}
/**
* 滑屏监测
*
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float minMove = 120; //最小滑动距离
float minVelocity = 0; //最小滑动速度
float beginX = e1.getX();
float endX = e2.getX();
float beginY = e1.getY();
float endY = e2.getY();
if(beginX-endX>minMove&&Math.abs(velocityX)>minVelocity){ //左滑
Toast.makeText(this,velocityX+"左滑",Toast.LENGTH_SHORT).show();
}else if(endX-beginX>minMove&&Math.abs(velocityX)>minVelocity){ //右滑
Toast.makeText(this,velocityX+"右滑",Toast.LENGTH_SHORT).show();
}else if(beginY-endY>minMove&&Math.abs(velocityY)>minVelocity){ //上滑
Toast.makeText(this,velocityX+"上滑",Toast.LENGTH_SHORT).show();
}else if(endY-beginY>minMove&&Math.abs(velocityY)>minVelocity){ //下滑
Toast.makeText(this,velocityX+"下滑",Toast.LENGTH_SHORT).show();
}
return false;
}
@Override
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
}