手势GestureDetector与ViewFlipper结合使用,实现滑动翻页

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>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值