在ViewFlipper的视图之间滑动动画

本文关键字:动画 之间 视图 ViewFlipper | 更新日期: 2023-09-27 18:02:09

在活动中,我有以下内容:

var flipper = FindViewById<ViewFlipper>(Resource.Id.flipper);
flipper.Touch += flipper_Touch;

触摸处理程序的基本实现如下:

float oldTouchValue = 0;
void flipper_Touch(object sender, View.TouchEventArgs e)
{
    var flipper = sender as ViewFlipper;
    switch(e.Event.Action)
    {
        case MotionEventActions.Down:
            oldTouchValue = e.Event.GetX();
            break;
        case MotionEventActions.Up:
            float currentX = e.Event.GetX();
            if (oldTouchValue < currentX)
            {
                flipper.ShowNext();
            }
            else if (oldTouchValue > currentX)
            {
                flipper.ShowPrevious();
            }
            break;      
    }
}

这允许我在不同的视图之间导航,但我想让它向左/向右滑动

我看到了一些Java示例,介绍了如何使其工作,但没有直接将其转换为c#的方法。

制作视图幻灯片需要什么?有没有办法在XML中定义animation
我可以使用XML中定义的animations和对OverridePendingTransition的调用使"活动"滑入滑出,但我不确定如何在此处应用这些知识。

在ViewFlipper的视图之间滑动动画

这使我可以在不同的视图之间导航,但我想使其向左/向右滑动

ViewFlipper通过其ViewAnimator类具有一些方法来设置输入和输出动作setInAnimation()setOutAnimation()的动画。这是在Android SDK中,但应该在MonoDroid中有对应关系(不幸的是,我不熟悉它,所以我可能错了(。为了获得所需的动画,只需使用上面的两种方法来设置所需动画(xml文件或程序构建的Animation(,然后像当前一样调用showNext/Previous方法。

你甚至在Android SDK中有一些幻灯片动画,但我不知道它们是否存在于MonoDroid中。

更新:这些方法在Monodroid中确实可用,并像这样公开:

//Using one of the built in animations:
flipper.setInAnimation(this, Android.Resource.Animation.SlideInLeft);
flipper.setOutAnimation(this, Android.Resource.Animation.SlideOutRight);
//Using custom animations defined in XML
flipper.setInAnimation(this, Resource.Animation.slide_in_right);
flipper.setOutAnimation(this, Resource.Animation.slide_out_left);

如果您想通过XML布局文件控制ViewFlipper动画,请将这些属性添加到ViewFlipper标记-

    android:inAnimation="@android:anim/slide_out_right"
    android:outAnimation="@android:anim/slide_in_left"

这是一个基本示例,其中ViewFlipper中的孩子使用android提供的默认动画滑入和滑出。

您还可以通过添加这些属性而不是上面的属性来提供您自己的动画文件-

    android:inAnimation="@anim/slide_in_right"
    android:outAnimation="@anim/slide_in_left"

然后创建这些动画文件-

res/anim/slide_In_left.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator" >
        <translate
            android:fromXDelta="0"
            android:toXDelta="-100%p"
            android:duration="500"/>
    </set>

res/anim/slide_In_right.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator">
        <translate
            android:fromXDelta="100%p"
            android:toXDelta="0"
            android:duration="500"/>
    </set>

如果你想自动启动这个动画,那么添加-

    android:flipInterval="2000"
    android:autoStart="true"

这将自动启动动画,并每隔2秒(2000毫秒(翻转图像(或视图(。