博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 场景转换Scene配合动画的使用
阅读量:5359 次
发布时间:2019-06-15

本文共 2837 字,大约阅读时间需要 9 分钟。

android Scene

   android Scene保存了view层级的状态,并保存了层级中所有view的属性值。动画框架能使用动画进行场景的切换,一般只需要制定exit(退出)动画,不需要制定enter(进入)动画,系统会自动帮我们创建进入动画。

用Layout创建一个场景

  用layout创建Scene时,一般这个layout是不变的,只有在layout创建的时候才会加载场景。如果你要改变这个layout的话,需要重新创建Scene。不能用layout的一部分来创建Scene。用layout创建Scene时需要吧Layout当做ViewGroup初始化,然后调用Scene.getSceneForLayout() 。

下面就来动手创建Scene:

主layout-res/layout/activity_main.xml

场景一、res/layout/a_scene.xml
场景二:
res/layout/another_scene.xml
现在我们就来创建Scene对象,
Scene mAScene;Scene mAnotherScene;//为Scene创建scene rootmSceneRoot = (ViewGroup) findViewById(R.id.scene_root);//创建 scenesmAScene = Scene.getSceneForLayout(mSceneRoot, R.layout.a_scene, this);mAnotherScene =    Scene.getSceneForLayout(mSceneRoot, R.layout.another_scene, this);

 这样场景已经创建成功,下一步就是为场景加上动作。

  场景动作在下边这些情况下用处比较大:
    1、需要加动画的view,他们不在同一个view层级中,这样就可以操作每个的view进行入场和出场动画。
    2、为那些没有自带动画效果的view加效果, 例如ListView中的子view,详情参考Limitations。
   为了保证动画的性能问题,要把他们放到线程里,然后调用 Scene.setExitAction() 或者 Scene.setEnterAction()。Framework 会在场景动画开始前调用setExitAction(),场景动画结束后调用 setEnterAction()。

场景变化

Transition类型
   AutoTransition:xml中配置<autoTransition/>,默认变化. 淡入淡出,移动 、重计算大小, views, in that order.
   Fade:xml中配置<fade/>android:fadingMode="[fade_in |fade_out |fade_in_out]"/>,淡入淡出
   ChangeBounds:<changeBounds/>移动并改变大小
一、xml创建一个Transition:
  1、工程中创建 res/transition/ 目录.
  2、创建xml资源文件
  3、加入Transition节点
res/transition/fade_transition.xml
然后java代码中载入xml资源
Transition mFadeTransition =        TransitionInflater.from(this).        inflateTransition(R.transition.fade_transition);
二、代码中创建
Transition
Transition mFadeTransition = new Fade();
  场景和Transition都已经创建好了,那么该怎么触发他们呢。
  系统为我们提供了TransitionManager类,我们可以通过TransitionManager.go()来把Scene和Transition融合到一块。
TransitionManager.go(mEndingScene, mFadeTransition);
  如果要融合多种变化的话可以用set来存放他们例如AutoTransiton

没有Scene如何使用转场动画呢

  我们不想用Scene,但是又想拥有场景动画的效果。例如:我们在ViewGroup中添加和移除View时,想要友好的提示效果。
TransitionManager.beginDelayedTransition() 可以帮我们实现这个效果。
xml资源文件
res/layout/activity_main.xml
...
java代码中使用方法如下面事例
private TextView mLabelText;private Fade mFade;private ViewGroup mRootView;...// Load the layoutthis.setContentView(R.layout.activity_main);...// Create a new TextView and set some View propertiesmLabelText = new TextView();mLabelText.setText("Label").setId("1");// Get the root view and create a transitionmRootView = (ViewGroup) findViewById(R.id.mainLayout);mFade = new Fade(IN);// Start recording changes to the view hierarchyTransitionManager.beginDelayedTransition(mRootView, mFade);// Add the new TextView to the view hierarchymRootView.addView(mLabelText);// When the system redraws the screen to show this update,// the framework will animate the addition as a fade in

转载于:https://www.cnblogs.com/qcjd/p/9324852.html

你可能感兴趣的文章
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
Luogu P1141 01迷宫【搜索/dfs】By cellur925
查看>>
js onclick事件传参
查看>>
WiCloud 商业Wi-Fi管理平台
查看>>
团队项目--未完待续
查看>>
双重标准,我该怎么解决
查看>>
python中的网页标签等字符处理
查看>>
Mybatis输入类型和结果类型
查看>>
Linux常用命令(五)
查看>>
Linux常用命令(四)
查看>>
Linux常用命令(六)
查看>>
Linux常用命令(六)
查看>>