在Transitions框架中,动画将创建一系列帧来描述视图结构从开始场景到结束场景的变化。视图框架通过Transition对象来代表这些动画,其中包括了动画的相关信息。要执行一个动画效果,需要向transitionManager(转场管理器)提供要使用的转场对象和和结束场景。

本节将讲解在两个场景之间使用内置的转场效果来实现移动、缩放和渐隐效果。下一节将介绍如何自定义转场效果。

创建一个转场

上一篇介绍了如何创建一个场景来代表视图结构的不同状态。创建了开始场景和结束场景之后还需要创建一个转场对象来定义切换过程中的动画效果。

框架支持在资源文件中指定内置的转场效果或者在代码中直接创建一个转场效果。

内置转场效果包括:

通过资源文件创建转场

使用该种方式可以在不改变任何代码的情况下修改转场效果。还可以避免在代码中引入非常复杂的转场操作。

要通过资源文件指定一个内置的转场效果,请按以下步骤:

为工程添加res/transition/目录。

在该目录中创建一个新的XML文件。

在XML文件中添加一个内置的转场。

例如,如下资源文件指定了渐隐渐显转场:

res/transition/fade_transition.xml

以下代码演示如何通过资源文件在代码中获取一个Transition实例:

Transition mFadeTransition =

TransitionInflater.from(this).

inflateTransition(R.transition.fade_transition);

通过代码创建转场

如果需要在代码中动态修改用户界面并应用转场可以使用该种方法。

要创建一个内置的转场效果,调用Transition类的子类的构造器即可。例如,以下代码创建了一个渐隐转场的实例。

Transition mFadeTransition = new Fade();

应用一个转场

典型的做法是响应某个事件(例如一个用户操作)来对不同的视图结构应用转场。例如,考虑一个搜索用应用:当用户键入搜索关键字并点击搜索按钮时,应用切换场景到搜索页面,在切换的过程中应用动画,搜索按钮渐隐消失,搜索结果渐显出现。

要响应某个事件并执行一个应用动画效果的场景切换,只要在结束场景中调用TransitionManager.go()这个静态方法即可,如下代码演示了这一操作:

TransitionManager.go(mEndingScene, mFadeTransition);

框架会把视图结构中的场景根视图替换为结束场景,同时执行转场动画。开始场景是上一个转场效果的结束场景,如果之前没有执行过转场,开始场景就自动被设定为用户界面的挡前状态。

如果没有指定转场对象,transitionManager会使用自动转场效果。

指定目标View

默认情况下框架会将转场效果应用于开始场景和结束场景中的全部View。

某些情况下,可能只需要对场景中的某些View应用动画效果。例如,框架不支持对ListView对象应用转场效果,所以需要在执行转场的时候排除它们。框架允许选择特定的某些View执行转场效果。

应用转场效果的每个View被称作一个Target(目标)。只能选择跟场景相关的视图结构中的一部分作为目标。

如果要移除目标列表中的一个或多个View,在转场开始之前调用 removeTarget()方法即可。要把指定的View加入到目标列表中,调用addTarget()方法即可。

指定多种转场效果

为了能够让动画获得最好的效果,需要让动画的类型和场景的变化相契合。

例如,如果要在场景切换时移除一些View并添加另一些View,渐隐/渐显动画可以提供一种明显的指示:一些View不再可用了。如果要改变View在屏幕中的位置,那么执行一个移动动画会是一个好的选择,用户会很容易注意到View的位置发生了改变。

不必局限于只使用一种动画效果,框架允许组合多个内置或自定义动画效果成为一个Transition Set(转场集)。

如果需要在XML文件中创建一个转场集,在res/transitions/目录中将这些转场置于transitionSet根节点下即可。以下代码演示了如何创建一个与默认转场效果一样的转场集:

android:transitionOrdering="sequential">

调用TransitionInflater.from()方法在代码中通过资源文件获取一个TransitionSet对象。TransitionSet类继承于Transition类,所以TransitionManager可以像处理Transition对象一样处理TransitionSet对象。

不使用场景应用转场效果

改变视图结构并不是改变用户界面的唯一方式。同样可以对当前视图结构添加、修改、删除子view的方式来改变界面。例如,需要只使用一个布局文件来实现搜索交互。开始时显示一个布局,其中包括一个关键字输入框和一个搜索按钮。如果需要把界面变为显示搜索结果,只需要在用户点击搜索按钮时调用ViewGroup.removeView()方法移除搜索按钮即可,之后在调用ViewGroup.addView()方法添加搜索结果。

在两个视图结构非常类似的时候,可能需要使用这种方式。对用户界面的小变化,没必要创建两个单独的布局文件,而只需要一个包含了视图结构的布局文件,相应的改变可以在代码中实现。

如果使用这种方式来改变布局结构,就没有必要创建场景。取而代之的是,可以在同一个视图结构的两种状态之间应用延迟转场。框架可以把当前的视图结构状态记录为初始状态,记录下其中的View发生的各种改变,然后当用户界面被重绘时对这些改变应用转场效果。

在单独的试图结构中创建一个延迟转场的步骤如下:

当事件激发了转场时,调用TransitionManager.beginDelayedTransition()方法,传递应用转场效果的所有View的共有父视图作为参数。框架会记录当前所有子View的状态和它们的属性值。

对子View进行需要的变换操作。框架会记录对子View所做的这些改变以及它们的属性值。

当系统根据改变重绘用户界面时,框架会对之前状态和当前的新状态之间应用转场。

以下例子演示了如何对一个被添加到视图结构中的TextView对象应用延迟转场,首先展示的布局文件:

res/layout/activity_main.xml

android:id="@+id/mainLayout"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/inputText"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

...

以下代码演示了如何为添加TextView添加动画效果:

private TextView mLabelText;

private Fade mFade;

private ViewGroup mRootView;

...

// 加载布局

this.setContentView(R.layout.activity_main);

...

// 创建一个TextView并添加一些属性

mLabelText = new TextView();

mLabelText.setText("Label").setId("1");

// 获取到视图根布局并创建一个动画效果

mRootView = (ViewGroup) findViewById(R.id.mainLayout);

mFade = new Fade(IN);

// 开始记录视图结构的变化

TransitionManager.beginDelayedTransition(mRootView, mFade);

// 将TextView添加到视图结构中

mRootView.addView(mLabelText);

//当系统开始重绘界面来展示试图变化的时候,框架会自动添加动画

定义场景的生命周期回调方法

场景的生命周期和Activity的生命周期类似,代表了从调用TransitionManager.go()方法开始到动画执行完成的这段时间内被框架监听到的各种状态的改变。在重要的生命周期状态点,框架会调用由TransitionListener定义的回调方法。

转场声明周期回调是非常有用的,例如,需要在场景切换的开始和结束分别记录View属性的时候。不能简单的将场景转换开始时的View的属性值拷贝到场景结束时View的属性值中,因为结束时的视图结构知道整个转场完全结束才会被填充出来。正确的做法是,将该属性值保存到变量中并在转场结束的时候将他赋值到视图结构中。为了能够在转场结束时进行操作,可以实现TransitionListener.onTransitionEnd()方法。

更多的相关信息可以参考TransitionListener的API。

Android | Vuforia 配置&运行Sample

1.部署Android开发环境参考blog:http://www.cnblogs.com/zoupeiyang/p/4034517.html2.安装vuforiaSDKhttps://developer.vuforia.com/resources/sdk/android3.下载Samplehttps://developer.vuforia.com/r

Transitions框架学习(三)—— 自定义转场

自定义转场可以用来创建一个使用内置转场无法提供的转场效果。例如,可以定义一个自定义转场效果将文字的前景色和输入框置灰来表明这个输入框

Android | Vuforia 更换Target

1.进入Vuforia网站-TargetManagerhttps://developer.vuforia.com/targetmanager/project2.CreateDatebase-AddTarget(有关Target识别要素:https://developer.vuforia.com/resources/dev-guide/image-targ

android图片转场,Transitions框架学习(二) —— 应用转场效果相关推荐

  1. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  2. PyTorch框架学习二——基本数据结构(张量)

    PyTorch框架学习二--基本数据结构(张量) 一.什么是张量? 二.Tensor与Variable(PyTorch中) 1.Variable 2.Tensor 三.Tensor的创建 1.直接创建 ...

  3. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  4. 《SpringBoot框架学习二之HTTP协议》

    <SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...

  5. Android 图片裁剪之三剑式(二)

    文章目录 1.PorterDuffXfermode 简介 2.PorterDuffXfermode 类型介绍 3.PorterDuffXfermode 使用场景 圆形头像 叠加图片还可以实现橡皮擦和加 ...

  6. android图片、动画、画布学习

    详解Paint的setXfermode(Xfermode xfermode) https://www.cnblogs.com/tianzhijiexian/p/4297172.html Android ...

  7. Android中免root的hook框架学习——whale(二)实战hook java方法

    文末附项目完整代码下载地址 一.在android studio中创建一个新的项目 Hook Java, 把whale项目里的java文件夹的代码复制到自己的项目中. 复制 built/Android  ...

  8. Android sqlite数据库操作通用框架AHibernate(二)源码-用于交流

    贴出源代码供大家交流使用,欢迎朋友们对代码提供宝贵意见,直接写到评论中即可.使用示例和步骤见上一篇博客:http://blog.csdn.net/lk_blog/article/details/745 ...

  9. Android的LitePal开源数据库框架学习笔记

    LitePal是一款非常好用的数据库开源框架,它采用了对象关系映射(ORM)的模式,使用这个框架从创建数据库到操作数据库都变成极其简单,那么我们就开始学习吧.它的开源地址:https://github ...

最新文章

  1. Ubuntu上通过android toolchain交叉编译Valgrind操作步骤
  2. Interesting visualization tools for profiling.
  3. 解析深度神经网络背后的数学原理!
  4. 2.常用的实现多线程的两种方式
  5. 计算机网络怎么删除,怎么删除网络协议
  6. 《算法竞赛进阶指南》0.4二分
  7. Django框架—富文本编辑器
  8. 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
  9. hibernate 各历史版本下载 spring各历史版本下载
  10. JVM学习-G1回收器
  11. 5次方用计算机,用科学计算器来求三的五次方的值,按键顺序是( )?
  12. nginx做代理上网
  13. python设计教务管理系统_python实现教务管理系统
  14. 2018首届世界传感器大会11月12日-14日在郑州召开
  15. 记一次走心One 2 One沟通
  16. 香奈儿机器人t恤_最hot超模:开场Chanel的机器人 真面目居然是小精灵?
  17. ant pro-table点击表格行高亮显示
  18. 【电力电子】【2011.08】通过谐波电流注入改善三相整流器输入功率因数
  19. Linux xargs 命令
  20. Go 安装 gin 速度慢解决方案(Windows下使用阿里云代理)

热门文章

  1. Vue结合3D技术实现VR看房效果
  2. fixedColumns.js固定列,行对不齐
  3. SD/MMC/SDIO 驱动分析
  4. 反光板导航SLAM(四)如何通过两个反光柱估计位姿
  5. 计算机在军事的应用论文,信息技术论文3000字【军事信息技术论文】
  6. 驾考题库项目学习记录
  7. 利用adb 打开手机应用程序
  8. JSP企业快信系统的设计与实现(论文+源码+PPT)
  9. 拼多多店铺权重如何提高-纽黑文教育
  10. dmg后缀的文件怎么在windows上运行