用ViewFlipper做了个滑屏效果,同时仿照android.R.anim.slide_in_left和slide_out_right做了个slide_in_right和slide_out_left,目的就是想让用户在左往右滑的时候,图片从左边进,右边出,用户从右往左滑的时候,图片从右边进,左边出,但是做出来以后发现存在一个问题,如果是左滑一下,右滑一下,这样没问题,但是如果是左滑两下以上,再右滑的话,这时候图片还是按照左滑的效果执行的,不过图片显示没有问题,Java代码和动画XML如下,请教大神们,到底是啥问题……
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 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 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>
图片左进右出用的是系统自带的android.R.anim.slide_in_left和android.R.anim.slide_out_right

解决方案 »

  1.   

    将vf.setInAnimation, vf.setOutAnimation放在对应的vf.showPrevious(), vf.showNext()之前。
      

  2.   

    楼主能把你做的工程发我一下吗?我急需阿,谢谢。我的邮箱是[email protected]
      

  3.   

    我也正在学习这个内容 麻烦楼主把你的这个工程发我邮箱里一下 。我的email:[email protected]
      

  4.   

    http://blog.csdn.net/ch_984326013/article/details/6702958
      

  5.   

    <a href="www.baidu.com">百度</a>
      

  6.   


    #include<iostream>
    using namespace std;
    void main(){
       count<<"你是SB";
    }
      

  7.   

    你好,谢谢你,这个对我有用,我看了你的代码,如果真的要实现左右滑,你将动画代码加入到show()之前,就可以了,我这边就是!