Android关于Activity切换效果的实现加强

转:http://www.open-open.com/lib/view/open1328364213530.html

早前做完一个应用后期需要加入点效果化。

相对于iPhone上应用的效果,最为经典的界面切换视觉效果就是,放大进入和缩小退出。

还好Android也早以有了这样对应的动画文件。

并且如大家所知的,提供了

overridePendingTransition()这个

最简单实现的方法api.

------------------------

但是如网上所说的:

这里需要特别说明的是,关于overridePendingTransition这个函数,有两点需要主意:

1.它必需紧挨着startActivity()或者finish()函数之后调用

2.它只在android2.0以及以上版本上适用

----------------------------------------

第二点不提了。

提下第一点,该方法必须在以上两个函数之后调用。

简单说就是A——>B切换

我们可以在A是startActivity方法后执行。那我A进来的时候呢?

比如A为入口Activity。

当然目前的应用可以很简单的解决这个视觉上的问题,因为一般应用进入都做了log或是过渡的Activity。

问题1也基本算解决了。

但是感觉每次都在start或是finish方法后写下这代码挺麻烦的

于是我试着把overridePendingTransition写在基类的oncreate中。

查看源码打印?

01/**

02*@authorNono

03*

04*/

05publicabstractclassBaseActivityextendsActivity{

06

07publicTextViewtitleView;

08

09@Override

10protectedvoidonCreate(BundlesavedInstanceState){

11requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

12super.onCreate(savedInstanceState);

13overridePendingTransition(R.anim.zoomin,R.anim.zoomout);

14

15}

发现也行的。。猜测这个方法背后发生了什么。

然后蛋疼的去看了下Activity中overridePendingTransition()方法,

然后引出:ActivityManagerNative,ActivityManagerProxy等等各个无语凝噎的名词。

引出ActivityManager框架。FrameWork层次东西了,有兴趣的可以google研究下。

提下切换效果的另一种玩法。

style文件。

上面这个方式看似能很好的解决了切换这个问题。

但是仔细一看却发现,只存在两种状态下,startActivity,开启时和finish,结束时。

一开始我考虑到activity单例以及不销毁问题。也就是不finish的时候。

悲剧了效果代码没地方写了。

简单举例:比如tabLayout布局式的。一个tabHost容器中有4个Activity,一般来说tag切换时,我们是不调用finish,而只是执行onStop,甚至上次我打

log时发现居然只是onPasue()(这个问题比较诡异了,暂且不理它)。

最后发现activity中Style下的一个android:windowAnimationStyle属性。

查看源码打印?

01<stylename="activty_fade_in_fade_out">

02<itemname="@android:activityOpenEnterAnimation">@anim/fade_in</item>

03

04<itemname="@android:activityOpenExitAnimation">@anim/fade_out</item>

05

06<itemname="@android:activityCloseEnterAnimation">@anim/fade_in</item>

07

08

09<itemname="@android:activityCloseExitAnimation">@anim/fade_out</item>

10</style>

查看源码打印?

1<stylename="register_activity"parent="XTheme">

2<itemname="@android:windowAnimationStyle">@style/activty_bottom_in_top_out</item>

3</style>

查看源码打印?

1<activityandroid:name=".activity.LoginActivity"android:screenOrientation="portrait"

2android:theme="@style/In_Out_theme"/>

以上只是style中item可以有更多选择,就刚好解决了上面提到的问题。

参数更多查看文档

http://developer.android.com/reference/android/R.styleable.html#WindowAnimation

顺带提下界面中View的效果,同样的可以自定义动画。

以及在布局文件中的

android:layoutAnimation中定义动画效果。

相关推荐