activity 进出动画及失效问题

本文介绍了在Android中实现Activity的进入和退出动画的方法。包括通过style.xml配置动画、动态设置动画效果及在Service中启动Activity时如何设置动画。此外还提供了一种基类Activity的解决方案,用于统一管理应用中多数Activity的自定义动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的进入和退出动画的实现

(1).在style.xml中配置Activity的动画

<!--actvity进出动画-->
    <style name="ActivityOutInAnimation">
        <!--新Activity进入动画-->
        <item name="android:activityOpenEnterAnimation">@anim/enter</item>
        <!--旧Activity退出动画-->
        <item name="android:activityOpenExitAnimation">@anim/exit</item>
        <!--旧Activity进入动画-->
        <item name="android:activityCloseEnterAnimation">@anim/enter</item>
        <!--新Activity退出动画-->
        <item name="android:activityCloseExitAnimation">@anim/exit</item>
    </style>

(2).为Activiy设置Theme

    
   <style name="DialogActivityStyle" parent="@android:style/Theme.Dialog">   
     <item name="android:windowAnimationStyle">@style/ActivityOutInAnimation</item>
   </style>
 
(3).在minfast.xml中为需要的activity设置Theme
 
           <activity
            android:name=".act.FunctionsActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@style/DialogActivityStyle" />

配置好后我发现在模拟器上运行 的没有问题,但是在某些手机上运行却失效了

无奈之下只好动态去设置Activity的动画效果

overridePendingTransition(int enterAnim, int exitAnim) 通过这个方法来设置Activity的进出动画

int enterAnim 进入动画
int exitAnim  退出动画
注意此方法在 startActivity()和 finish()之后调用

进入:

  Intent intent = new Intent(context,TestActivity.class);
  startActivity(intent);

  overridePendingTransition(R.anim.enter, R.anim.exit);
退出:
  @Override
   public void finish() {
      super.finish();
      overridePendingTransition(R.anim.enter,R.anim.exit);
   }
由于项目需求,我的Activity是在Service中启动的,在设置进入动画的时候,service中无法调用overridePendingTranstion(),这就无奈了....
幸好巨人的肩膀已为我搭好... 在要启动的onCreate()方法中调用overridePendingTranstion()方法
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//去标题
        overridePendingTransition(R.anim.enter, R.anim.exit);
        setContentView(R.layout.activity_functions);
    }
圆满收官!
最后如果应用中大多数的Activity都要使用自定义进出动画的话,可以写个基类继承Activity,重写启动和关闭Activity的方法,在其中
调用overridePandingTranstion()
public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
  /*重写startActivity()*/
    @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
        
        overridePendingTransition(R.anim.enter , R.anim.exit);
    }
  /*重写finish()*/
    @Override
    public void finish() {
        super.finish();
        
        overridePendingTransition(R.anim.enter , R.anim.exit);
        
    }
}



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值