【问题标题】:Android slide in/out animation for activity. Is this setup possible?用于活动的 Android 滑入/滑出动画。这种设置可以吗?
【发布时间】:2014-04-30 16:07:53
【问题描述】:

我正在努力实现以下目标。

我想通过单击 btn1 将活动 2 滑入,并希望通过单击 btn2 再次将活动 2 滑出,如下图所示:

我尝试使用以下 (c#) 代码来执行此操作; java equivelant 应该有点类似:

    //MainActivity      
    btn1.Click += (object sender, EventArgs e) => {
        var stationActivity = new Intent(_mainActivity, typeof(StationInfoActivity));
        StartActivity(stationActivity);
        _mainActivity.OverridePendingTransition(Resource.Animation.slide_1_enter, Resource.Animation.slide_1_exit);
        //I have a reference to the _mainActivity since this activity is technically a fragment
    };

    //StationActivity
    btn2.Click += (object sender, EventArgs e) => {
        var mainIntent = new Intent(this, typeof(MainActivity));
        StartActivity(mainIntent);
        this.OverridePendingTransition(Resource.Animation.slide_2_enter, Resource.Animation.slide_2_exit);
    };

以及以下资源文件:

    //slide_1_enter
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromYDelta="100%p" android:toYDelta="0%p"
            android:duration="@android:integer/config_shortAnimTime"/>

    //slide_1_exit
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromYDelta="0%p" android:toYDelta="0%p"
            android:duration="@android:integer/config_longAnimTime" />

    //slide_2_enter
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromYDelta="0%p" android:toYDelta="0%p"
            android:duration="@android:integer/config_longAnimTime" />

    //slide_2_exit
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromYDelta="0%p" android:toYDelta="100%p" 
            android:duration="@android:integer/config_longAnimTime" />

滑入 (slide_1_enter + slide_1_exit) 运行良好,但是,我不知道如何创建滑出动画 (slide_2_enter + slide_2_exit)。我没有直观地看到退出动画。这可能是由于以下原因:

  • MainActivity 可见(z-index:0)。
  • StationActivity 使用 btn1.Click 启动,并使用 slide_1_enter 在活动 1 上设置动画。
  • StationActivity 可见(z-index:1)
  • 当点击 btn2 时,MainActivity 将启动,但它会被置于 StationActivity 的顶部(获取 z-index:3),因此无法看到退出动画 (slide_2_exit)

所以,除非我能够更改活动的“z-index”,否则这将不起作用,对吧?

有解决办法吗?或者有什么其他建议?恐怕让这个工作的“最简单”的方法是使用 viewpager,但我不想实现这个,因为 activity1 已经在 viewpager 中,事情会变得更加复杂。

【问题讨论】:

  • 你不能在你的翻译中使用 -100% 作为 toYDelta 在你的翻译中使用 fromYDelta 吗?

标签: c# java android xamarin android-animation


【解决方案1】:

当覆盖按钮 1 的转换时,调用您的“幻灯片”动画。当您按下按钮 2 时,调用与滑入相反的“滑出”动画。即滑入将有:

fromYDelta="-100%"
toYDelta="0%"

滑出会有:

fromYDelta="0%"
toYDelta="-100%"

【讨论】:

    【解决方案2】:

    啊...刚刚找到了我的解决方案,而且非常简单。好吧,我想我仍处于学习阶段,但希望这个问题对其他人有所帮助......

    我的假设是正确的,即活动相互堆叠,因此无法看到退出动画。

    只需在“slide_2_exit”中添加属性“android:zAdjustment="top”即可为我解决此问题...

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="100%p" 
        android:zAdjustment="top"
    />    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多