请选择 进入手机版 | 继续访问电脑版

技术控

    今日:0| 主题:61536
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] Material Animations 1:Content Transitions

[复制链接]
Thedeathoflove 发表于 2016-10-4 21:22:48
174 2
同overridePendingTransition()方法执行效果类似
  Content Transition也称为Transitions between Activities,或Enter/Exit Transition,包括下图4个部分(本图截取自Udacity):
   

Material Animations 1:Content Transitions

Material Animations 1:Content Transitions-1-技术控-private,between,效果图,Enter,动画

  
       
  • 1. Exit A : 离开A界面时的转换动画   
  • 2. Enter B : 进入B界面时的转换动画   
  • 3. Return B : 从B界面返回时的转换动画;可不设置,默认执行 Enter B 的逆过程   
  • 4. Reenter A : 重新进入A界面时的转换动画;可不设置,默认执行 Exit A 的逆过程  
  二、效果图

   

Material Animations 1:Content Transitions

Material Animations 1:Content Transitions-2-技术控-private,between,效果图,Enter,动画

  三、实现方法

  编码实现

  ActivityA.java
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_a);    setupWindowAnimations();}private void setupWindowAnimations() {    Slide slide = new Slide();    slide.setDuration(500);    slide.setSlideEdge(Gravity.LEFT);    getWindow().setExitTransition(slide);//    getWindow().setReenterTransition(slide);}
复制代码
      ActivityB.java
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_b);    setupWindowAnimations();}private void setupWindowAnimations() {    Fade fade = new Fade();    fade.setDuration(500);    getWindow().setEnterTransition(fade);//    getWindow().setReturnTransition(slide);}
复制代码
      由于大部分相关API只支持API 19以上版本,甚至只支持API 21以上版本,因此需要添加如下判断:
        
  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  ...}
复制代码
      XML & Code实例化实现

  定义XML

  res/transition-v21/fade.xml
        
  1. <?xml version="1.0" encoding="utf-8"?><fade xmlns:android="http://schemas.android.com/apk/res/"    android:duration="500"/>
复制代码
      res/transition-v21/slide.xml
        
  1. <?xml version="1.0" encoding="utf-8"?><slide xmlns:android="http://schemas.android.com/apk/res/"    android:duration="500"/>
复制代码
      Code实例化

  ActivityA.java
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_a);    setupWindowAnimations();}private void setupWindowAnimations() {    Slide slide = TransitionInflater.from(this).inflateTransition(R.transition.slide);    getWindow().setExitTransition(slide);}
复制代码
      ActivityB.java
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_b);    setupWindowAnimations();}private void setupWindowAnimations() {    Fade fade = TransitionInflater.from(this).inflateTransition(R.transition.fade);    getWindow().setEnterTransition(fade);}
复制代码
      XML & Style声明式实现(强烈推荐)

  定义XML

  如果没有其它属性要求,本步骤可跳过,直接在下一步使用系统定义好的XML
   同 XML & Code实例化实现 一样,声明XML文件
  res/transition-v21/fade.xml
        
  1. <?xml version="1.0" encoding="utf-8"?><fade xmlns:android="http://schemas.android.com/apk/res/"    android:duration="500"/>
复制代码
      res/transition-v21/slide.xml
        
  1. <?xml version="1.0" encoding="utf-8"?><slide xmlns:android="http://schemas.android.com/apk/res/"    android:duration="500"/>
复制代码
      Style文件声明

  res/values-v21/styles.xml
        
  1. <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    ...    <item name="android:windowExitTransition">@transition/slide</item>    <item name="android:windowReenterTransition">@transition/slide</item>    <item name="android:windowEnterTransition">@transition/slide</item>    <item name="android:windowReturnTransition">@transition/slide</item></style>
复制代码
      也可以直接使用系统提供的过渡效果:
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_b);    setupWindowAnimations();}private void setupWindowAnimations() {    Fade fade = new Fade();    fade.setDuration(500);    getWindow().setEnterTransition(fade);//    getWindow().setReturnTransition(slide);}0
复制代码
      声明打开Content Transitions(非必须)

  如果上一个步骤继承的父主题不是AppCompt相关主题,还需要在styles.xml文件中声明:
        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_b);    setupWindowAnimations();}private void setupWindowAnimations() {    Fade fade = new Fade();    fade.setDuration(500);    getWindow().setEnterTransition(fade);//    getWindow().setReturnTransition(slide);}1
复制代码
      跳转

        
  1. @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_b);    setupWindowAnimations();}private void setupWindowAnimations() {    Fade fade = new Fade();    fade.setDuration(500);    getWindow().setEnterTransition(fade);//    getWindow().setReturnTransition(slide);}2
复制代码
zhongtian8888 发表于 2016-10-5 20:03:04
看电影,我都不耐烦看文艺片…
回复 支持 反对

使用道具 举报

BAHTE 发表于 2016-11-17 23:52:40
画面太美我不敢看
回复 支持 反对

使用道具 举报

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/c.CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 | 粤公网安备 44010402000842号 )

© 2001-2017 Comsenz Inc.

返回顶部 返回列表