手势监听的GestureDetector
安卓实现手势检测需要GestureDetector类,代表一个手势检测器
创建手势检测器需要实现GestureDetector.OnGestureListener接口
package com.example.study2;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
public Long exitTime = 0L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 手指按下
@Override
public boolean onDown(MotionEvent motionEvent) {
return false;
}
// down事件发生而move或者up还没发生前触发该事件
@Override
public void onShowPress(MotionEvent motionEvent) {
}
// 点击后抬起,并且点击后没有滑动
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
return false;
}
// 滚动屏幕
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
return false;
}
// 长按
@Override
public void onLongPress(MotionEvent motionEvent) {
}
// 滑动
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
return false;
}
}
触发顺序:onDown->onShowPress->onSingleTapUp
重写的六个方法
创建GestureDetector.OnGestureListener接口的实例需要重写以下六个方法
实例
1、图片滑动查看
package com.example.study2;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.ViewFlipper;
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
int[] imgs = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03, R.drawable.img04};
Animation[] animations = new Animation[4];
int distance = 100;
ViewFlipper viewFlipper;
GestureDetector gestureDetector ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = findViewById(R.id.view_flipper);
gestureDetector = new GestureDetector(MainActivity.this, this);
// 想视图滑动器件添加图片视图
for(int i = 0 ; i < imgs.length ; i++){
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(imgs[i]);
viewFlipper.addView(imageView);
}
}
@Override
public boolean onDown(MotionEvent motionEvent) {
return false;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
return false;
}
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
}
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
// 向左滑
// motionEvent表示触摸的时候的事件对象,motionEvent1表示手指离开的时候的触摸对象
if(motionEvent.getX() - motionEvent1.getX() > distance){
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_out));
viewFlipper.showPrevious();
return true;
}else if(motionEvent1.getX() - motionEvent.getX() > distance){
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.slide_out_right));
viewFlipper.showNext();
return true;
}
return false;
}
// 监听器监听触摸事件,进而触发上述的动作
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
}
手势添加
上述是系统自定义的手势,我们可以自己添加手势