用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>