MainActivity.java
package practise.lxm.hello;
import android.app.Activity;
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;
/**
* 手势GestureDetector与ViewFlipper结合使用,实现滑动翻页
*/
public class MainActivity extends Activity
implements GestureDetector.OnGestureListener{
//手势监测
GestureDetector gestureDetector;
//包含多页面
ViewFlipper viewFlipper;
//翻页动画集合
Animation [] animations = new Animation[4];
//最短的x方向滑动距离,只有不小于该距离才实现翻页
final int MIN_LENGTH = 50;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化多页面
viewFlipper = (ViewFlipper)findViewById(R.id.viewFlip_main);
viewFlipper.addView(genImageView(R.drawable.a));
viewFlipper.addView(genImageView(R.drawable.b));
viewFlipper.addView(genImageView(R.drawable.c));
viewFlipper.addView(genImageView(R.drawable.f));
viewFlipper.addView(genImageView(R.drawable.e));
//初始化动画
animations[0] = AnimationUtils.loadAnimation(this,R.anim.left_in);
animations[1] = AnimationUtils.loadAnimation(this,R.anim.left_out);
animations[2] = AnimationUtils.loadAnimation(this,R.anim.right_in);
animations[3] = AnimationUtils.loadAnimation(this,R.anim.right_out);
gestureDetector = new GestureDetector(this,this);
}
/**
* 滑动后松开手触发
* @param e1
* @param e2
* @param velocityX
* @param velocityY
* @return
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float moveLength = e1.getX() - e2.getX(); //x方向移动的距离
if(moveLength < -MIN_LENGTH){ //从左往右 显示下一页,
viewFlipper.setInAnimation(animations[0]);
viewFlipper.setOutAnimation(animations[1]);
viewFlipper.showNext();
return true;
}else if( moveLength > MIN_LENGTH ) { //从右往左 显示上一页
viewFlipper.setInAnimation(animations[2]);
viewFlipper.setOutAnimation(animations[3]);
viewFlipper.showPrevious();
return true;
}
return false;
}
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.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) {
}
/**
* 生成图片视图
* @param srcId 图片原
* @return
*/
private ImageView genImageView(int srcId){
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(srcId);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
}
动画文件
left_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="2000"/>
</set>
left_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="100%"
android:duration="2000"/>
</set>
right_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%"
android:toXDelta="0"
android:duration="2000"/>
</set>
right_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="-100%"
android:duration="2000"/>
</set>