Android Scene transition简单使用和分析
2017-03-30 00:02
253 查看
Scene(场景)
Scene保存了布局的状态,包括所有的控件和控件的属性。布局可以是一个简单的视图控件或者复杂的视图树和子布局。保存了这个布局状态到Scene后,我们就可以从另一个场景变化到该场景。Android 提供了一个类Scene来代表场景。Transitions(变换)
从一个场景到另一个场景的变换中会有动画效果,这些动画信息就保存在Transition对象中。要运行动画,我们要使用TransitionManager实例来应用Transition
适合:在同一Activity中进行无缝的过度(非跳转Activity过度)
使用实例
main_activity.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.jian.boketest.MainActivity"> <FrameLayout android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" ></FrameLayout> </LinearLayout>
创建场景1
scene1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/image" 4000 android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:src="@drawable/ic_write" /> <Button android:id="@+id/close_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="goTransition" /> <TextView android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="大法好螺丝刀卡减肥啦三等奖杀得了房间里拉屎的会计师大楼附近了三大件扫到了福建省的咖啡就爱上当减肥收代理费就死定了福建省的拉法基扫到了福建省的发上来的咖啡就死定了可减肥了盛大" /> </LinearLayout>
创建场景2
scene2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/image" android:layout_width="300dp" android:layout_height="200dp" android:src="@drawable/ic_write" /> <Button android:id="@+id/close_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="goTransition2" /> <TextView android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="大法好螺丝刀卡减肥啦三等奖杀得了房间里拉屎的会计师大楼附近了三大件扫到了福建省的咖啡就爱上当减肥收代理费就死定了福建省的拉法基扫到了福建省的发上来的咖啡就死定了可减肥了盛大 " /> </LinearLayout>
在MainActivity中
public class MainActivity extends AppCompatActivity { private Scene scene1; private Scene scene2; Transition transition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup mRoot = (ViewGroup) findViewById(R.id.root); scene1 = Scene.getSceneForLayout(mRoot,R.layout.scene1,this); scene2 = Scene.getSceneForLayout(mRoot,R.layout.scene2,this); transition = TransitionManager.go(scene1); } public void goTransition(View v){ TransitionManager.go(scene2); } public void goTransition2(View v){ TransitionManager.go(scene1); } }
注:如果我们没设置transition的话,android 会自动为我们适配一套适合的动画
自定义过度效果
transition1.XML<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeBounds android:duration="250"> <targets> <target android:targetId="@id/image"/> </targets> </changeBounds> <fade android:startDelay="300" android:duration="250"> <targets > <target android:targetId="id/description"/> <target android:targetId="id/close_button"/> </targets> </fade> </transitionSet>
调用自定义transition代码
TransitionManager.go(scene1, TransitionInflater.from(this).inflateTransition(R.transition.transition1));
但是我们必须注意的是需要在style中的theme中添加
<style name="AppTheme" parent="Theme.AppCompat"> <item name="android:windowContentTransitions">true</item> </style>
否侧无法体现出效果
设置退出或进入动画
Scene 可以通过setExitAction 和setEnterAction来设置退出和进入动画tip:可用于加载数据动画的展示
setExitAction(new Runnable() { @Override public void run() { //do something } }); setEnterAction(new Runnable() { @Override public void run() { //do something } });
查找Scene中的控件 如:
Button mButton = (Button ) mRoot.findViewById(R.id.close_button);
相关文章推荐
- Android端服务器推送技术原理分析及XMPP简单的使用
- android Retrofit简单使用及源码分析
- android 性能分析工具、布局分析工具、monkey自动化测试的简单使用
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- 使用Kotlin实现Android简单Demo,对比JAVA实现分析具体语法不同之处(一)
- Android端服务器推送技术原理分析及XMPP简单的使用(转)
- 使用Kotlin实现Android简单Demo,对比JAVA实现分析具体语法不同之处(二)
- Android端服务器推送技术原理分析及XMPP简单的使用
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- Android之HandlerThread源码分析和简单使用(主线程和子线程通信、子线程和子线程通信)
- 天天记录 - Android ListView itemType使用Holder原理简单分析
- Android安全讲座第七层 [二] apkcrypt的使用和简单分析
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- Android开源项目pulltorefresh分析与简单使用
- Android开源项目pulltorefresh分析与简单使用
- android-architecture-components的简单使用分析
- AndroidSlidingUpPanel 使用控制和简单的分析方法
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- web客户端,服务端,android客户端关于JSON的使用分析
- Android-AsyncTask简单介绍和使用