当前位置: 代码迷 >> 多核软件开发 >> android ViewFlipper滑屏有关问题
  详细解决方案

android ViewFlipper滑屏有关问题

热度:1258   发布时间:2013-02-26 00:00:00.0
android ViewFlipper滑屏问题 - 移动平台 / Android
用ViewFlipper做了个滑屏效果,同时仿照android.R.anim.slide_in_left和slide_out_right做了个slide_in_right和slide_out_left,目的就是想让用户在左往右滑的时候,图片从左边进,右边出,用户从右往左滑的时候,图片从右边进,左边出,但是做出来以后发现存在一个问题,如果是左滑一下,右滑一下,这样没问题,但是如果是左滑两下以上,再右滑的话,这时候图片还是按照左滑的效果执行的,不过图片显示没有问题,Java代码和动画XML如下,请教大神们,到底是啥问题……

Java code
public class MainActivity extends Activity {    private ViewFlipper vf;        GestureDetector gd;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                vf = (ViewFlipper) findViewById(R.id.myFlipper);                gd = new GestureDetector(new MyTouch());        vf.setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                // TODO Auto-generated method stub                return gd.onTouchEvent(event);            }        });        vf.setLongClickable(true);    }    // 实现SimpleOnGestureListener接口来监听各种触摸事件    private class MyTouch extends SimpleOnGestureListener {        // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE,        // 1个ACTION_UP触发        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                float velocityY) {            // 参数解释:            // e1:第1个ACTION_DOWN MotionEvent            // e2:最后一个ACTION_MOVE MotionEvent            // velocityX:X轴上的移动速度,像素/秒            // velocityY:Y轴上的移动速度,像素/秒            boolean flag = false;                        // 触发条件 :            // X轴或者Y轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒            if (e1.getX() - e2.getX() > 0) {                // Fling left                vf.showPrevious();                                flag = true;                            } else if (e2.getX() - e1.getX() > 0) {                // Fling right                vf.showNext();                                flag = false;                            }                        if(flag){                // 设置切入动画                vf.setInAnimation(AnimationUtils.loadAnimation(                        getApplicationContext(), R.anim.slide_in_right));                // 设置切出动画                vf.setOutAnimation(AnimationUtils.loadAnimation(                        getApplicationContext(), R.anim.slide_out_left));            }else{                // 设置切入动画                vf.setInAnimation(AnimationUtils.loadAnimation(                        getApplicationContext(), android.R.anim.slide_in_left));                // 设置切出动画                vf.setOutAnimation(AnimationUtils.loadAnimation(                        getApplicationContext(), android.R.anim.slide_out_right));            }                        return true;        }    }}


图片右进左出的动画效果:
slide_in_right.xml
XML code
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate android:fromXDelta="50%p" android:toXDelta="0" android:duration="200"/>    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="200" /></set>


slide_out_left.xml
XML code
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate android:fromXDelta="0" android:toXDelta="-50%p" android:duration="200"/>    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="200" /></set>
  相关解决方案