Android为手势提供了一个GestureDetector类
要想实现手势的监听需要实现以下两个步骤
1、创建GestureDetector对象 实现GestureDetector.OnGestureListener监听实例
2、//2.为activity的onTouchEvent绑定监听事件
以下是该类实现的demo
ImageSwither.java
package lzl.edu.com.gesturedetectordemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class ImageSwither extends Activity implements GestureDetector.OnGestureListener{
/**
* 图片的切换效果。
* 步骤:
* 1、找到几张好看的图片,复制到mipmap中。
* 2、运用viewFlipper组件(这个第一次听说过,汗)。该组件是个容器组件。可以添加任意的其他组件
* 3、使用Animation数组为图片设置不同的动画效果。
* 4、创建GestureDetector对象,在onTouchEvent中注册监听事件
* 5、 定义滑动坐标的最小距离
* @param savedInstanceState
*/
private Animation []animations = new Animation[4]; //设置动画效果的类
private ViewFlipper mViewFlipper;
private GestureDetector detector;
private final float MIN_DRIC = 50; //定义滑动坐标的最小距离
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_image_swither);
detector = new GestureDetector(this);
mViewFlipper =(ViewFlipper)findViewById(R.id.viewFlipper);
int [] images = new int[]{R.mipmap.girl1,R.mipmap.girl2,R.mipmap.girl3,
R.mipmap.girl4,R.mipmap.girl5};
for (int i=0;i<images.length;i++) {
mViewFlipper.addView(addImageView(images[i]));
}
//设置图片淡进淡出的效果
animations[0] = AnimationUtils.loadAnimation(this,R.anim.fade_in);
animations[1] = AnimationUtils.loadAnimation(this,R.anim.fade_out);
}
//设置ImageView的布局
public ImageView addImageView(int id){
ImageView images = new ImageView(this);
images.setImageResource(id);
images.setScaleType(ImageView.ScaleType.FIT_CENTER); //设置布局
return images;
}
//在onTouchEvent中为GestureDetectors注册监听事件
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
@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) {
//进行手势的监听,如果e1.getX() - e2.getX()说明是从右往左滑。设置查看上一张图片
if(e1.getX() - e2.getX() > MIN_DRIC){
//设置淡出淡入的效果
mViewFlipper.setInAnimation(animations[0]);
mViewFlipper.setOutAnimation(animations[1]);
mViewFlipper.showPrevious(); //显示先前的图片
return true;
}
//进行手势的监听,如果e2.getX() - e1.getX()说明是从右往左滑。设置查看上一张图片
if(e2.getX() - e1.getX() > MIN_DRIC){
//设置淡出淡入的效果
mViewFlipper.setInAnimation(animations[0]);
mViewFlipper.setOutAnimation(animations[1]);
mViewFlipper.showNext(); //显示下一张的图片
return true;
}
return false;
}
}
activity_image_swither.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="lzl.edu.com.gesturedetectordemo.ImageSwither">
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></ViewFlipper>
</RelativeLayout>