Android 如何实现从右向左动画开始活动

Android 如何实现从右向左动画开始活动,android,animation,android-activity,Android,Animation,Android 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 an

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

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>
<?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>
<?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>
我想实现一个从右到左的动画。如何做到这一点


提前谢谢。

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

从右向左滑动

<?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>

从左向右滑动

<?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>

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

enter.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>
现在,如果您想拥有第一个动画的“向后”动画,当您离开活动B时,您需要两个新的动画文件和活动B的onBackPressed方法中的一些代码,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.enter, R.anim.exit);
}
首先是动画文件: 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>
此外,如果启用了向上导航,则在这种情况下还必须添加动画:

您可以如下方式启用向上导航:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.enter, R.anim.exit);
}
这也是在这种情况下处理动画的方式:

@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);
}
还要注意,即使您的代码正常,您的手机也可能已关闭动画。要打开,请执行以下操作:

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
  • 打开设置并转到开发人员选项
  • 确保已启用(通过滑动右上角的切换按钮)
  • 向下滚动并在“绘图”下,逐个点击这些选项:“Windows动画比例”、“过渡动画比例”和“Animator持续时间比例”
  • 选择“动画比例1x”

  • 这有帮助吗?

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

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

    编辑:

    示例如下所示:

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

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

    <?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"/>
    

    要在整个应用程序上应用活动转换动画,我们需要遵循以下几个步骤

    第一步。创建四个动画资源(向左滑入、向右滑入、向左滑出和向右滑出)

    资源文件:slide\u 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\u in_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>
    
    <?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>
    
    <?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\u out\u 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\u out\u 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>
    
    <?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>
    
    <?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>
    
    
    
    第二步。创建自定义样式并使用动画资源

    <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>
    
    
    @动画/幻灯片在右侧
    @动画/滑出左
    @动画/幻灯片在左
    @动画/滑出\右
    
    第三步。将样式应用于应用程序的主题

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        
        <item name="android:windowAnimationStyle">@style/MyCustomActivityAnimation</item>
    </style>
    
    
    @样式/MyCustomActivityAnimation
    
    第四步。将主题应用于清单中的应用程序

    <application
       ....
        android:theme="@style/AppTheme"
        >
        ....
     </application>
    
    
    ....
    
    要在目标活动中编写什么来实现这一点?请参见编辑,以获取添加到活动A的示例,以及b要编写什么来启动活动和目标活动?绝对正确。我要补充一点too@Mike我们可以使用内置的android.R.anim.slide\u左移和android.R.anim.slide\u右移吗?前两个动画可以在后过渡中重复使用,只需交换它们即可@Mike@abdu试试看:)