【问题标题】:Move animation (Translate animation)移动动画(翻译动画)
【发布时间】:2015-01-19 16:38:16
【问题描述】:

我有这样的布局:

<LinearLayout
    android:id="@+id/buttonLayout"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Button
        android:id="@+id/btnNl"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:background="@drawable/splashBtnOrange"
        android:layout_marginRight="5.50dp" />
    <Button
        android:id="@+id/btnNoLanguage"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:background="@drawable/splashBtnWhite"
        android:layout_marginRight="5.50dp" />
    <Button
        android:id="@+id/btnFr"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:background="@drawable/splashBtnGreen" />

还有这样的代码:

    void HandleBtnNlClick (object sender, EventArgs e)
    {
        controller.SaveSetting("language","nl");

        TranslateAnimation anim2 = new TranslateAnimation(0,-((int)(btnFr.GetX() - btnNoLanguage.GetX())), 0, 0);
        anim2.Duration = 1000;
        anim2.FillAfter = true;

        TranslateAnimation anim1 = new TranslateAnimation(0, btnNoLanguage.GetX()-btnNl.GetX(), 0, 0);
        anim1.Duration = 1000;
        anim1.FillAfter = true;

        btnNl.StartAnimation (anim1);
        btnFr.StartAnimation (anim2);



        //_initModel.gotoNextScreen ();
    }

    void HandleBtnFrClick (object sender, EventArgs e)
    {
        controller.SaveSetting("language","fr");

        TranslateAnimation anim1 = new TranslateAnimation(0, btnNoLanguage.GetX()-btnNl.GetX(), 0, 0);
        anim1.Duration = 1000;
        anim1.FillAfter = true;

        TranslateAnimation anim2 = new TranslateAnimation(0,-((int)(btnFr.GetX() - btnNoLanguage.GetX())), 0, 0);
        anim2.Duration = 1000;
        anim2.FillAfter = true;

        btnNl.StartAnimation (anim1);
        btnFr.StartAnimation (anim2);
    }

当 btnFr 被推动时,btnFr 和 BtnNl 必须移动到中间 (noLanguageBtn 在哪里)。

一切正常,唯一的问题是当 BtnFr 被推送时, 它必须移动到 BtnNl 之上。当 BtnNl 被推送时,它必须移动到 BtnFr 之上。我怎样才能做到这一点?目前 btnFr 总是在 BtnNl 之上 因为它是稍后在布局中定义的...

【问题讨论】:

    标签: android animation button move


    【解决方案1】:

    在动画结束时使用 BtnNl.bringToFront()

    编辑 试试这个: 在 BTN1 点击时的第一部分代码中,而不是

    btnNl.StartAnimation (anim1);
    btnFr.StartAnimation (anim2);
    

    像这样翻转订单

    btnFr.StartAnimation (anim2);
    btnNl.StartAnimation (anim1);
    

    【讨论】:

    • 什么意思它不起作用?BtnNi 还在后面?这很奇怪,因为bringToFront 使视图成为顶视图。您必须实现动画侦听器并在 OnAnimationEnd 中执行
    • 它必须移动到另一个按钮上,而不是在动画完成时生成
    • 我也试过了,没有好的结果。问题已解决。由于线性布局,在将其带到前台后,整个布局看起来很混乱。我将其更改为 relativelayout 并解决了问题,我使用了与您编辑的答案相同的方法:)