在我的主活动上,我有一个带有三个子视图的ViewFlipper。在应用程序首次启动后,当我进行第一次从右向左的滑动时,视图会改变,但它没有滑动动画效果。在第一次滑动后,在任何方向上滑动时,动画效果都按预期工作。我正在遵循这篇教程。我使用的代码是:
public boolean onTouchEvent(MotionEvent touchevent)
{
switch (touchevent.getAction())
{
// when user first touches the screen
case MotionEvent.ACTION_DOWN:
{
lastX = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP:
{
float currentX = touchevent.getX();
// left to right swipe
if (lastX < currentX)
{
if (mViewFlipper.getDisplayedChild() == 0)
break;
mViewFlipper.setInAnimation(this, R.anim.in_from_left);
mViewFlipper.setOutAnimation(this, R.anim.out_to_right);
mViewFlipper.showPrevious();
}
// right to left swipe
if (lastX > currentX)
{
if (mViewFlipper.getDisplayedChild() == mViewFlipper.getChildCount() - 1)
break;
mViewFlipper.setInAnimation(this, R.anim.in_from_right);
mViewFlipper.setOutAnimation(this, R.anim.out_to_left);
mViewFlipper.showNext();
}
break;
}
}
return false;
}
当我调试代码时,我没有看到动画工作和不工作之间的任何区别。而且,我在实际设备和模拟器上都看到了这种行为。我错过了什么?如果需要,我可以发布动画xml文件和视图xml。
编辑:
我能够使其按预期工作的唯一方法是在onCreate方法中设置以下内容:
mViewFlipper.setInAnimation(this, R.anim.in_from_right);
mViewFlipper.setOutAnimation(this, R.anim.out_to_left);
mViewFlipper.setFlipInterval(10000);
mViewFlipper.startFlipping();
然后我在第一次滑动时调用stopFlipping()方法。有趣的是,即使第一次自动翻转尚未发生,使用这些更改时动画也会在第一次滑动时起作用。但是,如果我只是在onCreate方法中设置动画而没有调用startFlipping()方法,则第一次滑动仍然没有动画效果。有人能解释一下为什么会出现这种行为吗?