【问题标题】:How to achieve right to left animation to start the activity如何实现从右到左的动画启动activity
【发布时间】:2014-10-17 18:13:17
【问题描述】:

我正在开发一个演示应用程序,我想在应用程序启动任何activity 时应用动画。我写了下面的代码,但这是为了从左到右为活动设置动画。

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate android:fromXDelta="-100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="500"/>
</set>

right_to_left.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />
</set>

我在这里开始像这样的activity

startActivity(new Intent(this, LoginActivity.class));
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);

我想实现从右到左的动画。如何做到这一点。

提前致谢。

【问题讨论】:

    标签: android animation android-activity


    【解决方案1】:

    对您的动画文件进行以下修改:

    进入.xml:

    <?xml version="1.0" encoding="utf-8"?>
    
    <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>
    

    退出.xml:

    <?xml version="1.0" encoding="utf-8"?>
    
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate
            android:duration="500"
            android:fromXDelta="0%"
            android:fromYDelta="0%"
            android:toXDelta="-100%"
            android:toYDelta="0%" />
    </set>
    

    您的第二个活动将从右向左滑入。

    为了更好地理解如何使用动画的 fromXDelta 和 toXDelta 值,这里有一个关于这些值的非常基本的说明:

    这样您就可以轻松理解为什么要为当前活动添加 android:fromXDelta="0%" 和 android:toXDelta="-100%"。这是因为您希望它从 0% 变为 -100% 位置。

    [编辑]

    因此,如果您想从 ActivityA 打开 ActivityB,请执行以下操作(假设您有一个按钮):

    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(ActivityA.this, ActivityB.class));
                overridePendingTransition(R.anim.enter, R.anim.exit);
            }
        });
    

    现在,如果你想要第一个的“向后”动画,当你离开 Activity B 时,你需要 2 个新的动画文件和 ActivityB 的 onBackPressed 方法中的一些代码,如下所示:

    首先是动画文件: left_to_right.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <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>
    

    right_to_left.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate
            android:duration="500"
            android:fromXDelta="0%"
            android:fromYDelta="0%"
            android:toXDelta="100%"
            android:toYDelta="0%" />
    </set>
    

    在 ActivityB 中执行以下操作:

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

    此外,如果您启用了向上导航,则在这种情况下您还必须添加动画:

    您可以像这样启用向上导航:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    

    这也是您在这种情况下处理动画的方式:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
           //NavUtils.navigateUpFromSameTask(this);
           finish();
           overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
           return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    另外请注意,即使您的代码没问题,您的手机也可能会关闭动画。要打开然后执行以下操作:

    1. 打开设置并转到开发者选项
    2. 确保它已启用(通过滑动右上角的切换按钮)
    3. 向下滚动并在“绘图”下,一一点击这些选项:Windows 动画比例、过渡动画比例和 Animator 持续时间比例
    4. 选择“动画比例 1x”

    这有帮助吗?

    【讨论】:

    • 写什么来启动活动和目标活动?
    • 当然。我也加一下
    • @Mike 我们可以使用内置的 android.R.anim.slide_in_left 和 android.R.anim.slide_out_right 吗?
    • 前两个动画可以重复用于后面的过渡,只是交换它们? @迈克
    • @abdu 试试看 :)
    【解决方案2】:

    overridePendingTransition 应该在“目标”活动中调用。例如:从 Activity A -> B 开始,您可以将 overridePendingTransition 调用放在 Activity B 的 onCreate 中。

    请记住,如果用户在系统级别禁用了动画,则无法强制显示动画。

    编辑:

    示例如下所示:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        overridePendingTransition(R.anim.enter, R.anim.exit);
    }
    

    【讨论】:

    • 在目标活动中写什么来实现这一点?
    • 请参阅编辑示例以添加到您的活动 A 和 B
    【解决方案3】:

    这对我来说是完美的代码 向左滑动

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

    向右滑动

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

    在活动中

    Intent intent = new Intent(getApplicationContext(),termcondionactivity.class);
    Bundle bndlAnimation = ActivityOptions.makeCustomAnimation(getApplicationContext(), R.anim.slideinleft, R.anim.slideinright).toBundle();
    
    startActivity(intent, bndlAnimation);
    

    【讨论】:

      【解决方案4】:

      试试这个代码,它对我有用

      从右向左滑动

      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android"
          android:fillAfter="true" >
          <translate
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:duration="500"
              android:fromXDelta="0%"
              android:toXDelta="-50%" >
          </translate>
      </set>
      

      从左向右滑动

      <?xml version="1.0" encoding="utf-8"?>
      <translate xmlns:android="http://schemas.android.com/apk/res/android"
          android:duration="500"
          android:fromXDelta="-50%"
          android:toXDelta="0%" >
      </translate>
      

      【讨论】:

        【解决方案5】:

        要在整个应用程序上应用 Activity 过渡动画,我们需要遵循几个步骤。

        步骤 1. 创建四个动画资源。 (slide_in_left、slide_in_right、slide_out_left 和 slide_out_right)

        资源文件:slide_in_left.xml

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

        资源文件:slide_in_right.xml

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

        资源文件:slide_out_left.xml

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

        资源文件:slide_out_right.xml

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

        第 2 步。创建自定义样式并使用动画资源。

        <style name="MyCustomActivityAnimation" parent="@android:style/Animation.Activity">
            <item name="android:activityOpenEnterAnimation">
                @anim/slide_in_right
            </item>
            <item name="android:activityOpenExitAnimation">
                @anim/slide_out_left
            </item>
            <item name="android:activityCloseEnterAnimation">
                @anim/slide_in_left
            </item>
            <item name="android:activityCloseExitAnimation">
                @anim/slide_out_right
            </item>
        </style>
        

        第 3 步。将样式应用于应用程序的主题。

        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
            
            <item name="android:windowAnimationStyle">@style/MyCustomActivityAnimation</item>
        </style>
        

        第 4 步。将主题应用到 Manifest 中的应用程序。

        <application
           ....
            android:theme="@style/AppTheme"
            >
            ....
         </application>
        

        【讨论】:

          猜你喜欢
          • 2015-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-04
          • 2011-07-06
          相关资源
          最近更新 更多