作者:fuvogsda99363818 | 来源:互联网 | 2024-11-04 13:54
篇首语:本文由编程笔记#小编为大家整理,主要介绍了GestureDetector手势检测相关的知识,希望对你有一定的参考价值。 android手势检测器GestureDetector,要创建一个Ges
篇首语:本文由编程笔记#小编为大家整理,主要介绍了GestureDetector手势检测相关的知识,希望对你有一定的参考价值。
android手势检测器GestureDetector,要创建一个GestureDetector需要传入一个监听器GestureDetector.OnGestureListener。
案例(实现手机相册侧滑):
activity_main.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_技术图片" src="https://img6.php1.cn/3cdc5/c5d0/243/f2c3658a98750a4a.jpeg" >
slide_in_left.xml
android:fromXDelta="-100%p"
android:toXDelta="0"
android:duration="500"/>
slide_in_right.xml
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0"/>
slide_out_left.xml
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0"/>
slide_out_right.xml
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0"/>
MainActivity.java
package com.yifenqing.seepicture;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
//第一步:让MainActivity实现GestureDetector.OnGestureListener接口,
// 并实现所有方法
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
Animation[] animatiOns= new Animation[4];
final int distance = 50;
private int[] images = new int[]{
R.mipmap.tx1,R.mipmap.tx2,R.mipmap.tx3,R.mipmap.tx4
};
//第二步:定义一个全局的手势检测器
GestureDetector detector;
ViewFlipper flipper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(MainActivity.this,this);
//第三步:将要显示的图片加载到ViewFliper中,并且初始化动画数组
flipper = findViewById(R.id.flipper);
for(int i=0;i ImageView imageView = new ImageView(this);
imageView.setImageResource(images[i]);
flipper.addView(imageView);
}
animations[0] = AnimationUtils.
loadAnimation(this,R.anim.slide_in_left);
animations[1] = AnimationUtils.
loadAnimation(this,R.anim.slide_out_left);
animations[2] = AnimationUtils.
loadAnimation(this,R.anim.slide_in_right);
animations[3] = AnimationUtils.
loadAnimation(this,R.anim.slide_out_right);
}
@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) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//第4步:在onFling()方法中通过触摸事件的X坐标判断是向左还是向右滑动,并设置动画
//从右向左滑
if(e1.getX() - e2.getX() > distance){
flipper.setInAnimation(animations[2]);
flipper.setOutAnimation(animations[1]);
flipper.showPrevious();
return true;
}else if(e2.getX() - e1.getX() > distance){
flipper.setInAnimation(animations[0]);
flipper.setOutAnimation(animations[3]);
flipper.showNext();
return true;
}
return false;
}
//第5步:将Activity上的触摸事件交给GestureDetectory
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
}
这样我们就实现了相册手机的侧滑效果。