37

去一个新活动的最佳方式是什么,但让它看起来像活动向左滑动并且新活动进入屏幕?我正在使用意图来调用新活动,如果我希望应用程序是轻量级的,这是这样做的吗?

更好地解释一下:在我的 Android 手机上,我可以用主菜单向右滑动视图,然后从左侧进入朋友流并在屏幕上进行。我想在我的应用程序中通过按钮点击来完成它,这是我所追求的“滑动”。谢谢!

4

5 回答 5

91

在 android OS 2.1 或更高版本中,我认为您可以使用OverridePendingTransition()方法来提供您正在寻找的活动动画之间的那种过渡。

首先,在/res/anim/中定义几个动画资源。这是一个名为right_slide_out.xml

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

另一个叫right_slide_in.xml

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

然后,当您开始新活动时,使用 OverridePendingTransition 方法,如下所示:

startActivity(intent);
overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);

那应该处理启动活动的过渡动画。

相反,当该活动完成并且您回到原来的活动时,它会更加模糊。

如果您有一些 UI 控件结束该活动并调用 Activity.finish(),那么您可以在此之后添加 overridePendingTransition()。

要处理用户通过按下后退按钮结束活动的情况,请使用以下内容:

@Override
public void onBackPressed() 
{

    this.finish();
    overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);
}
于 2011-01-26T17:41:51.907 回答
4

您可以使用 left_slide_out.xml(只需将 Josh 的 right_slide_out.xml 中的 toXDelta 更改为 -100%p),以使旧活动消失在左侧(并且两个动画的持续时间也相同)。

于 2012-07-13T10:35:33.523 回答
3

是的,使用意图是启动另一个活动的标准方式,并且通常会执行您提到的滑动操作。例如 startActivity( new Intent( this, myNextActivity.class ) ); 会做的。

于 2011-01-26T16:42:52.403 回答
3

杰姆斯是对的。默认情况下,您将在启动新意图时获得滑动动画。

如果您正在寻找更自定义的动画,您可以使用overridePendingTransition。请记住,它是在 API 级别 5 中添加的。有关示例用法,请参阅此API 演示

于 2011-01-26T17:25:41.710 回答
1

关于进入和退出动画是什么有点混乱。对于那些仍在思考它的人,这里有一个模板..

overridePendingTransition(
    enterAnimationForCalledActivity, 
    exitAnimationForCallingActivity
);

这应该可以稍微清除一下空气。

于 2018-03-09T09:17:07.540 回答