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

早前做完一个应用后期需要加入点效果化。
 
相对于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中。
 


/**
 * @author Nono
 * 
 */
public abstract class BaseActivity extends Activity {
   public TextView titleView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        super.onCreate(savedInstanceState);
        overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
    }




 发现也行的。。猜测这个方法背后发生了什么。
 
然后蛋疼的去看了下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属性。
 
<style name="activty_fade_in_fade_out">
        <item name="@android:activityOpenEnterAnimation">@anim/fade_in</item>
       <item name="@android:activityOpenExitAnimation">@anim/fade_out</item>
        <item name="@android:activityCloseEnterAnimation">@anim/fade_in</item>
        <item name="@android:activityCloseExitAnimation">@anim/fade_out</item>
    </style>




<style name="register_activity" parent="XTheme">
       <item name="@android:windowAnimationStyle">@style/activty_bottom_in_top_out</item>
    </style>
 
<activity android:name=".activity.LoginActivity" android:screenOrientation="portrait"
        android:theme="@style/In_Out_theme"/>




 以上只是style中item可以有更多选择,就刚好解决了上面提到的问题。
 
参数更多查看文档
 
http://developer.android.com/reference/android/R.styleable.html#WindowAnimation
 

顺带提下界面中View的效果,同样的可以自定义动画。
 
以及在布局文件中的
 
android:layoutAnimation中定义动画效果。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值