android5.0的transition属性设置动画,初步使用。

来源:互联网 发布:数据加密算法有哪些 编辑:程序博客网 时间:2024/05/15 21:05

在泡网上看到一篇2016年制的学习的五个开源项目
第一篇是一个讲究动画的项目,其中transition这个属性之前一直没有学习到,啊,感觉好多东西都落伍了,老师教的东西还停留在上个世纪。于是自己来慢慢发掘用法吧,捣鼓activity之间的切换都让我用尽洪荒之力了。

个人的基本概念理解

在两个activity之间切换的时候,transition把这个过程分成了四种类型
假定有a和b两个activity
从a调用b 这里会产生a的退出(exit)
b的进入 (enter)
从b返回a 这里会产生b的返回(return)
a的再进入(reenter)
基本动画就是在这四个阶段做处理(但是我一直不知道为什么a的退出没有效果)

动画设置

首先当然是建立两个activity啦
各自有一个button来触发事件
在activity a里面
setContentView之前调用Window下的方法设置活动a的退出和再进入
同理在activity b里面
setContentView之前调用Window下的方法设置活动b的进入和返回

这是activity a的相关

 super.onCreate(savedInstanceState);        getWindow().setExitTransition(new Fade());        getWindow().setReenterTransition(new Slide().setDuration(1000));        setContentView(R.layout.activity_main);

可以看到,a里面设置的行为是Exit和Reenter的属性,设置exit的动画为fade,设置 Reenter的属性为slide并设置动画时长为2000ms,这和Animation的属性设置一个意思一个意思。

这是activity b的相关

super.onCreate(savedInstanceState);        getWindow().setEnterTransition(new Explode().setDuration(2000));        getWindow().setReturnTransition(new Fade().setDuration(1));        setContentView(R.layout.activity_main2);

这个就很容易理解了,分别设置了enter和return的动画为explode和fade,并分别设置了相应的动画时间。

不同的跳转方法

接下来就是从活动a跳转到活动b,再从b返回到活动a来看效果
这里因为设置了动画,所以代码和普通的intent跳转不太一样,也不能直接finish

在活动a里面,startActivity方法需要用一个重载

Intent intent=new Intent(MainActivity.this,Main2Activity.class);        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

活动b里面则需要执行另外一个方法

finishAfterTransition();

在a和b之间跳转就能够依次看到a的exit和b的enter,b的return和a的reenter,两两对应,一起执行。但是实际测试中发现,a的exit我没有效果,不知道怎么回事。

代码片段(指定布局里面的view的动画)

当然这个transition也是可以用在activity托管的viewgroup的view的

 TransitionManager.beginDelayedTransition(rootView,new Fade());        toggleVisibility(bt1,bt2,bt3,bt4);private static void toggleVisibility(View... views){        for (View v:views) {            boolean isVisible = v.getVisibility()==View.VISIBLE;            v.setVisibility(isVisible?View.INVISIBLE:View.VISIBLE);        }    }

rootView是一个viewgroup,比如你的LinearLayout啊之类的,bt1…bt4则是viewGroup上面的控件,这里做的事情是,判断view是否处于可见状态,如果可见,则点击之后变为不可见,如果不可见,点击之后变为可见,而这个可见和不可见切换的时候,则触发设置好的transition属性(这里是fade)
这个fade仅仅适用于设置的viewGroup,因为这里的view都是在这个viewGroup上,所以才能适用。

0 0
原创粉丝点击