Android Transition框架全解析

Android Transition框架全解析

目录

1       Android Transition框架... 2

1.1         Transition的综述... 2

1.2         Transition框架的限制... 2

2       Scene. 3

2.1         Scene简介... 3

2.2         创建Scene. 3

2.2.1     通过XML创建Scene. 3

2.2.2     通过代码创建Scene. 4

3       Transition——场景过渡动画... 4

3.1         场景过渡动画... 4

3.2         动画效果的触发... 5

3.2.1     Transition的属性... 6

3.2.2     界面切换的代码实现:... 7

3.2.3     界面切换的XML文件实现:... 9

3.2.4     直接在主题<style>标签里添加类似如下代码:... 10

3.3         Transition的几个类... 10

3.4         Fragment的transition. 12

3.5         Fragment之间的切换... 13

3.5.1     设置进入和退出时的动画... 13

3.5.2     启动Fragment13

 

1     Android Transition框架

1.1     Transition的综述

Android4.4引入了Scenes和Transition,Scene保存了布局的状态,包括所有的控件和控件的属性。布局可以是一个简单的视图控件或者复杂的视图树和子布局。保存了这个布局状态到Scene后,我们就可以从另一个场景变化到该场景。从一个场景到另一个场景的变化会有动画效果,这些动画信息就保存在Transition对象中。要运动动画就要使用TransitionManager来应用Transition。

Android5.0(API21)提供了更加丰富的内建Transition效果,例如Slide、Explode等,并且提出了Activity/Fragment间切换的Transition、携带共享的view进行跳转。

虽然Transition框架带来了一系列酷炫的效果,但由于该框架只能在Android4.4以上只用,导致现下许多旧版本的手机不支持该效果,以致transition应用的不常见。而开源库Transitions-Everywhere做到兼容Android2.24.0+。

注:Transition-Everywhere的使用:

首先是在 Gradle 中引入

    dependencies{

         compile"com.andkulikov:transitionseverywhere:1.6.5"

    }

将所有类包名为android.transition.* 的替代com.transitionseverywhere.*

1.2     Transition框架的限制

(1)       如果将Transition应用在一个SurfaceView上,可能会造成不正常的显示。SurfaceView是在非UI线程更新的,因此在UI线程执行动画时,SurfaceView可能不会被实时同步。

(2)       TextureView与一般的transition相容,但transition中依赖于viewOverlay(叠加层)的功能(如fade)与textureView不兼容,viewOverlay不适用于Textureview。

注:TextureView可以用来显示内容流,内容流例如是视频或OpenGl场景,来自本应用程序以及其他进程。与SurfaceView相比,TextureView不会创建一个单独的窗口,这使得它可以像一般的View一样执行一些变换操作。

(3)       AdapterView的子类,比如ListView并不适应于Transition框架。

(4)       如果尝试使用动画调整TextView大小,文本将在对象完成大小调整之前弹出到新的位置。为避免此问题,不要为包含文本的视图调整大小。

2     Scene

2.1     Scene简介

一个Scene保存了一个视图层级结构,包括它所有的views以及views的状态。Transition框架可以实现在starting sceneending scene之间执行动画。起始场景通常是从当前布局自动确定的,我们只需要创建ending sceneTransition框架允许我们通过XML文件或Java代码创建一个Scene。两种方式都需要使用Scene类。

2.2     创建Scene

2.2.1       通过XML创建Scene

XML创建主要用于静态视图,生成的场景表示创建Scene实例时视图层级结构的状态。如果视图层级结构发生改变,则必须重新创建Scene。此方法只能以整个layout文件的师徒层级结构创建Scene,不能只用某一部分来创建。

创建步骤:(注意那些ID)

(1)       定义layout布局

(2)       获取一个View对象来充当Scene对象的根视图参数:

private FrameLayout sceneRoot;

sceneRoot=(FrameLayout)findViewById(R.id.activityA_layout);

(3)       使用定义好的布局文件生成Scene对象:Scene.getSceneForLayout方法

Scene scene1=Scene.getSceneForLayout(sceneRoot,R.layout.activityB,this);

第1个参数:被创建Scene中所有viewhierarchy的根视图(Root View)

第2个参数:需要被加载到Scene对象中的布局文件ID

第3个参数:上下文对象Context

(4)       进行跳转:TransitionManager.go(scene,newSlide());//如果这个scene是一个activity的布局,按back键是回不到上一个Activity的;并且即使视图是正确的但是按钮等都是失效的,因为跳转后并不是一个真正的Activity。

2.2.2       通过代码创建Scene

    调用构造方法(Scene(sceneRoot, viewHierarchi))new Scene对象

同样要根视图:

    mSceneRoot =(ViewGroup) mSomeLayoutElement;

    mViewHierarchy = (ViewGroup)someOtherLayoutElement;

Scene mScene = new Scene(mSceneRoot, mViewHier

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值