使用从左到右模式启动活动

30

我遇到了一个问题。

我有三个活动,我需要用向左滑动的方式启动新的活动。

Activity1

Activity2

Activity3

意思是 enter image description here

当我点击按钮时,新的活动不应该像安卓的行为一样直接显示。

我希望新的活动从右侧进入并在当前屏幕上显示。

有人可以给我提供指导吗? 这是动画还是其他什么。


开始活动,然后应用转换效果。请查看此链接:http://www.mindfiresolutions.com/Animation-on-Switching-between-activities-1392.php 还有这个链接:http://www.christianpeeters.com/android-tutorials/tutorial-activity-slide-animation/#more-483 - The Holy Coder
谢谢Manish,请将此放入适当的答案中,以便我可以标记为已接受。 - Monty
https://dev59.com/92025IYBdhLWcg3wW0oc#6056067 - Dhaval Parmar
@CobraAjgar:我已经在答案中添加了我的评论。顺便说一下,只有两个简单的链接可以访问源代码和更多信息。而且,在答案部分只允许使用简单链接,这就是为什么我将其发送到评论中的原因。 - The Holy Coder
5个回答

106

我会尝试帮助您理解以下示例:

res/anim/trans_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="@android:integer/config_longAnimTime"/>
</set>

res/anim/trans_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="@android:integer/config_longAnimTime"/>
</set>

res/anim/trans_right_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="@android:integer/config_longAnimTime"/>
</set>

res/anim/trans_right_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="@android:integer/config_longAnimTime"/>
</set>

src/Activity2

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_traces);
        overridePendingTransition(R.anim.trans_left_in, R.anim.trans_left_out);
...}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.trans_right_in, R.anim.trans_right_out);
}

最简单的方法!注意:在覆盖PendingAnimation之前调用super.onBackPressed();,否则它将无法工作。 - WuerfelDev
我已经寻找这个很长时间了 :)!! 从Activity1到Activity2的转换 [左 => 右 | 左 <= 右] - ivanleoncz
太棒了!谢谢! - Ravi Dhoriya ツ

19

开始活动,然后应用过渡效果。 要了解更多信息,请访问此处,要查看源代码示例,请访问此页。如有任何疑问,请随时评论。


Manish,有一件事我需要同时开始另一个活动...比如点击A活动后,我需要按顺序显示B、C。我该怎么做? - Monty
在B Activity中,你不能没有任何意图。有一件事你可以做的就是在Activity B的onCreate()方法中启动C Activity。 - The Holy Coder
它直接显示了C的行动。 - Monty
然后在B活动的onStart中使用startActivity(C Activity),并在启动之前使用Thread.sleep或其他等待执行下一行的方法。 - The Holy Coder
1
如果没有你编写的源代码,我无法再提供更多帮助。因此,请针对不同的问题提出不同的问题。在那里展示一下你尝试了什么以及你期望得到什么? - The Holy Coder
你应该尽可能给出自包含的答案,而不仅仅是链接,因为如果链接失效,你的回答将毫无用处。 - El Mac

11

更好的方法是创建以下样式:

<style name="mytheme" parent="@android:style/Theme.Black">
    <item name="android:windowAnimationStyle">@style/theme</item>
</style>

<style name="theme">
    <item name="android:windowEnterAnimation">@anim/fade_in</item>
    <item name="android:windowExitAnimation">@anim/fade_out</item>
</style>

然后,在清单文件中使用android:theme标签将此样式应用于您的活动。


从学习的角度来看,这很有帮助。但实际上,当向后倒播动画时,我需要反转它,而这个方法并不能做到。 - chris838

6

这里是:

Intent intent=new Intent(Activity1.this,Activity2.class);
startActivityForResult(intent,0);
getActivity().overridePendingTransition( R.anim.righttoleft, R.anim.stable );

这里是动画righttoleft.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >

    <translate
          android:duration="500"
          android:fromXDelta="-100%"
          android:fromYDelta="0%"
          android:toXDelta="0%"
          android:toYDelta="0%" />
</set>

以及 stable.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <alpha android:fromAlpha="1.0" android:toAlpha="1.0" 
      android:interpolator="@android:anim/accelerate_interpolator" 
      android:duration="500"
      android:repeatCount="0"/>
</set>

3

在启动SecondActivity之前调用overridePendingTransition方法。它需要两个int类型的参数enterAnim, exitAnim

  • enterAnim是要使用的进入活动的动画资源的资源ID。使用0表示没有动画。
  • exitAnim是要使用的退出活动的动画资源的资源ID。使用0表示没有动画。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接