【问题标题】:Push In/Out Animation Between Activities活动之间的推入/推出动画
【发布时间】:2013-06-09 18:51:12
【问题描述】:

我正在开发一个包含许多代表阶段的活动的应用程序。所以有 Stage1Activity、Stage2Activity、Stage3Activity 等。每个 Activity 都有一个按钮(或多个按钮),一旦单击,就会将用户带到下一个 Activity。我想做的是为这些活动之间的过渡设置动画。

我在 res/anim 文件夹中添加了两个 XML 文件。 push_left_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

还有push_left_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

在主Activity中,我有Stage1Activity:

public class Stage1Activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stage1);
    overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK){
            finish();
            overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

现在,当我在活动中移动时,过渡会正常进行。新活动将旧活动从右向左推到视野之外。当用户按下设备上的后退按钮时,我想要一个相反的效果,但是会播放相同的过渡动画。我玩过 android:fromXDelta 标签并取得了一些非常奇怪的结果,但我只是不知道如何设置它,以便在按下设备上的后退按钮时,新的活动(实际上是旧的一个新调用的意图) 从左到右推出旧的。

基本上我想让它看起来像你在通过阶段时向右移动,但是当你按下它时它应该看起来像你回到了(向左)。抱歉,如果这是一个愚蠢的问题,但我真的很困惑,我需要帮助:/

【问题讨论】:

    标签: animation android-activity slide


    【解决方案1】:

    我想回答我自己的问题有点愚蠢……但我想我自己清理自己的烂摊子才是合适的。我做了一些更广泛的研究并使用了代码,我很自豪地说我已经解决了这个问题。这是下面的解决方案,供任何可能需要它的人参考。

    此应用程序需要四个动画。首先,单击 Stage1Activity 上的按钮后,我想将该活动向左滑动并淡出,同时在 Stage2Activity 中从右向左滑动。这需要两个 XML 文件:

    push_left_in.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="500"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
    </set>
    

    push_left_out.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="-100%" android:duration="500"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
    </set>
    

    这两个文件在onCreate 中的overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); 命令中调用,就在setContentView 下方。一个推出旧活动,另一个推出新活动。现在我只需要在设备上按下后退按钮时的相反效果。这需要一个全新的动画(我没有马上得到的东西)。

    所以我再添加两个 XML 文件:

    push_right_in.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="100%" android:duration="500"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
    </set>
    

    push_right_out.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
    </set>
    

    这两个文件在overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out); 中调用,放在onKeyDown 方法中,用于返回按钮响应。一个将旧活动滑出,另一个将新活动滑入 - 但与之前的动画相比方向相反。不要忘记更改 alpha 值,因为这发生在我身上,哈哈

    无论如何,这个问题现在已经结束了。抱歉,添麻烦了!或者不,因为我至少获得了风滚草的成就XD

    【讨论】:

    • 但对我来说,问题发生在我不想完成现有活动的情况下(我只想在前一个之上开始下一个)......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2012-06-08
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多