<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/layout">
</LinearLayout>
package hello.world.button;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private GestureDetector mGestureDetector;//手势处理
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.mGestureDetector = new GestureDetector(this, new MyGestureListener());
View view = findViewById(R.id.layout);
view.setFocusable(true);
view.setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
private class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
/*
* 滑动 使用 onFling()方法
* 3.判断
*/
String result = drawTouch(e1.getX(), e1.getY(), e2.getX(), e2.getY());
Log.d("onFling ", ": " + result);
return true;
}
}
/**
* 手势判断
*
* @param x
* @param y
* @param upx
* @param upy
* @return
*/
private String drawTouch(float x, float y, float upx, float upy) {
String str = "没有滑动";
//水平滑动
if (upx - x > 100) {
str = "向右滑动";
} else if (x - upx > 100) {
str = "向左滑动";
} else if (upy - y > 100) {
str = "向下滑动";
} else if (y - upy > 100) {
str = "向上滑动";
}
return str;
}
}
package hello.world.button;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.TypedValue;
import android.view.Display;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
private GestureDetector mGestureDetector;//手势处理
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.mGestureDetector = new GestureDetector(this,new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 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(distanceX) > minVelocity) { // 左滑
// Log.d("方向", "onFling: 左");
// } else if (endX - beginX > minMove && Math.abs(distanceX) > minVelocity) { // 右滑
// Log.d("方向", "onFling: 右");
// } else if (beginY - endY > minMove && Math.abs(distanceY) > minVelocity) { // 上滑
// Log.d("方向", "onFling: 上");
// } else if (endY - beginY > minMove && Math.abs(distanceY) > minVelocity) { // 下滑
// Log.d("方向", "onFling: 下");
// }
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@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) { // 左滑
Log.d("方向", "onFling: 左");
} else if (endX - beginX > minMove && Math.abs(velocityX) > minVelocity) { // 右滑
Log.d("方向", "onFling: 右");
} else if (beginY - endY > minMove && Math.abs(velocityY) > minVelocity) { // 上滑
Log.d("方向", "onFling: 上");
} else if (endY - beginY > minMove && Math.abs(velocityY) > minVelocity) { // 下滑
Log.d("方向", "onFling: 下");
}
return false;
}
});
View view =findViewById(R.id.layout);
view.setFocusable(true);
view.setOnTouchListener(this);
view.setLongClickable(true);
view.setLongClickable(true);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
}
onFling,onScroll的区别是
onScroll是触摸时候一直数据的
onFling是触摸停止后才有数据的