当前位置:操作系统 > 安卓/Android >>

简单的滑动切换页面并且加上类似Ipone的切换效果

Java代码 
public class Main extends Activity implements OnGestureListener, 
        OnTouchListener { 
    // 一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数: 
    // isFlipping: 用来判断View切换是否正在进行 
    // setFilpInterval:设置View之间切换的时间间隔 
    // startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行 
    // stopFlipping: 停止View切换 
    private ViewFlipper viewFlipper; 
    private GestureDetector gestureDetector; 
 
    private Button pre1Button; 
    private Button next1Button; 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        init(); 
    } 
 
    private void init() { 
        pre1Button = (Button) findViewById(R.id.preButton1); 
        next1Button = (Button) findViewById(R.id.nextButton1); 
        pre1Button.setOnTouchListener(this); 
        next1Button.setOnTouchListener(this); 
        gestureDetector = new GestureDetector(this); 
        viewFlipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper); 
    } 
 
    // GestureDetector.OnDoubleTapListener:用来通知DoubleTap事件,类似于鼠标的双击事件,该接口有如下三个回调函数: 
    //    
    // 1. onDoubleTap(MotionEvent e):通知DoubleTap手势, 
    // 2. onDoubleTapEvent(MotionEvent 
    // e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知); 
    // 3. onSingleTapConfirmed(MotionEvent 
    // e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,OPhone系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。 
    public boolean onDoubleTap(MotionEvent e) { 
        if (viewFlipper.isFlipping()) { 
            viewFlipper.stopFlipping(); 
        } else { 
            viewFlipper.startFlipping(); 
        } 
        return true; 
    } 
 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
        return this.gestureDetector.onTouchEvent(event); 
    } 
 
    @Override 
    public boolean onDown(MotionEvent e) { 
        // down事件 
        return false; 
    } 
 
    public boolean onFling(// 
            MotionEvent e1, // e1:第一个ACTION_DOWN事件(手指按下的那一点) 
            MotionEvent e2, // e2:最后一个ACTION_MOVE事件 (手指松开的那一点) 
            float velocityX,// velocityX:手指在x轴移动的速度 单位:像素/秒 
            float velocityY)// velocityY:手指在y轴移动的速度 单位:像素/秒 
    { 
        // 滑动手势事件 
        if (e1.getX() - e2.getX() > 60) {// 向右滑动,下一页 
            // setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。 
            this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, 
                    R.anim.zoomin)); 
            this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, 
                    R.anim.zoomout)); 
            this.viewFlipper.showNext();// 调用该函数来显示FrameLayout里面的下一个View。 
            return true; 
        } else if (e1.getX() - e2.getX() < -60) {// 向左滑动,上一页 
            this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, 
                    R.anim.zoomin)); 
            this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, 
                    R.anim.zoomout)); 
            this.viewFlipper.showPrevious();// 调用该函数来显示FrameLayout里面的上一个View。 
            return true; 
        } 
        return false; 
    } 
 
    @Override 
    public void onLongPress(MotionEvent e) { 
        // 长按事件 
    } 
 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
            float distanceY) { 
        // 在屏幕上拖动事件。 
        return false; 
    } 
 
    @Override 
  

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,