Android中的新活动“从侧面进入”

时间:2011-01-26 16:34:53

标签: android user-interface android-activity screen android-sliding

进入新活动的最佳方式是什么,但让活动向左滑动,新活动进入屏幕?我正在使用Intent来调用新活动,如果我希望应用程序是轻量级的话,是否可以这样做?

为了更好地解释一下:在我的Android手机上,我可以向右侧的家庭meny滑动视图,然后从左侧输入朋友流并在屏幕上进行。我想在我的应用程序中使用buttonclicks来实现它,这是我所追求的“滑动”。 谢谢!

5 个答案:

答案 0 :(得分:90)

在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);
}

答案 1 :(得分:4)

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

答案 2 :(得分:3)

是的,使用意图是开始另一项活动的标准方法,通常会提到您提到的滑动内容。 例如startActivity(new Intent(this,myNextActivity.class));会做的。

答案 3 :(得分:3)

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

如果您正在寻找更多自定义动画,可以使用overridePendingTransition。请注意,它已在API级别5中添加。有关示例用法,请参阅此API demo

答案 4 :(得分:1)

关于进入和退出动画的内容存在一些混淆。对于那些仍在思考它的人来说,这是一个模板..

overridePendingTransition(
    enterAnimationForCalledActivity, 
    exitAnimationForCallingActivity
);

这应该可以清除空气。