activity 进出动画及失效问题

来源:互联网 发布:烯牛数据工作怎么样 编辑:程序博客网 时间:2024/05/16 05:39

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



 
0 0