C# 在视口翻转器的视图之间滑动动画

C# 在视口翻转器的视图之间滑动动画,c#,android,android-layout,xamarin.android,android-animation,C#,Android,Android Layout,Xamarin.android,Android Animation,在一项活动中,我有以下几点: var flipper = FindViewById<ViewFlipper>(Resource.Id.flipper); flipper.Touch += flipper_Touch; var flipper=findviewbyd(Resource.Id.fliper); flipper.Touch+=flipper\u Touch; 触摸处理程序的基本实现如下所示: float oldTouchValue = 0; void flipper_

在一项活动中,我有以下几点:

var flipper = FindViewById<ViewFlipper>(Resource.Id.flipper);
flipper.Touch += flipper_Touch;
var flipper=findviewbyd(Resource.Id.fliper);
flipper.Touch+=flipper\u 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;      
    }
}
//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);
float-oldTouchValue=0;
无效flipper_Touch(对象发送器,View.TouchEventArgs e)
{
var flipper=发送方作为ViewFlipper;
开关(如事件、动作)
{
案例MotionEventActions.Down:
oldTouchValue=e.Event.GetX();
打破
case MotionEventActions.Up:
float currentX=e.Event.GetX();
如果(oldTouchValuecurrentX)
{
flipper.ShowPrevious();
}
打破
}
}
这允许我在不同的视图之间导航,但我想让它向左/向右滑动

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

要使视图滑动需要什么?有没有办法在
XML
中定义
动画

我能够使用
XML
中定义的
动画
和调用
覆盖转换
使活动滑入滑出,但我不确定如何在这里应用这些知识

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

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

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

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

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;      
    }
}
//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
标记中-

    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\u中的\u 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>
    <?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>

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

@Aɐpɥuıthnx用于编辑。。。事实上,我不知道如何突出这样的词,学到了一些新的东西:)@Lukesprog你的信息让我在Monodroid中找到了我需要的东西。我不想发布我自己的答案,因为我想将你的答案标记为答案(不想从你那里窃取),所以我编辑了你的答案,将我在MonoDroid中发现的内容包括在内,希望你不会介意。还有thnx@Lukesprog回答得很好,它根据我的背景工作。有一件事让我有点困惑,那就是在
flipper OnClickListener
中,我使用了
flipper.SetInAnimation(这是Android.Resource.Animation.Slide,左);flipper.showNext()并且工作得很好,现在我应该为
flipper.showPrevious()做什么?我正在搜索不使用按钮的解决方案。谢谢你advance@ZubairAhmadKhan我不确定我是否理解你的问题。如果您想执行
flipper.showPrevious()
,那么从用户角度来看,按钮就是一种方式,就像您在
flipper.showNext()
中使用按钮一样。否则用户应该如何返回?要使用内置动画,请使用android.R.anim.slide\u in\u left
inJava@LucianoMarqueto表示未知动画师名称:translate时出错,似乎无法处理片段。