Android过渡动画之进入退出
2015-11-18 17:08
441 查看
在Android5.x中,Google对动画效果进行了更深一步的诠释,为Activity的转场效果设计了更加丰富的动画效果。
Android5.x提供了三种Transition类型。
1、进入:一个进入的过渡(动画)决定activity中的所有的视图怎么进入屏幕。
2、退出:一个退出的过渡(动画)决定一个activity中的所有视图怎么退出屏幕。
3、共享元素:一个共享元素过渡(动画)决定两个activities之间的过渡,怎么共享(它们)的视图。
进入和退出的效果包括:
explode(分解) –进或出地移动视图,从屏幕中间
slide(滑动) -进或出地移动视图,从屏幕边缘
fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图(的效果)
使用步骤:
1.设置动画(两种方式):
a、xml设置
当你定义继承了material主题样式时,使用android:windowContentTransitions属性启用窗口的内容转换(效果)。你还可以指定进入、退出、和共享元素的转换:
定义transition动画:
b、代码设置
在这里需要注意:
(1)setExitTransition() - 当A start B时,使A中的View退出场景的transition
(2)setEnterTransition() - 当A start B时,使B中的View进入场景的transition
(3)setReturnTransition() - 当B 返回 A时,使B中的View退出场景的transition
(4)setReenterTransition() - 当B 返回 A时,使A中的View进入场景的transition
另外如果需要修改动画时长,可以这样:
2.Activity跳转方法
下面看一个实例demo:
具体代码:
第一个界面MainActivity.java
activity_transition.xml
第二个界面Transitions.java
但是,这个知识点我还有一个疑问,比如我需要从欢迎页过渡到首页,欢迎页动画过渡玩需要关闭,但是如果我直接加finish的话,过渡过程中会有一个退出的现象,希望有大神看到能帮我解决这个问题,谢谢~
Android5.x提供了三种Transition类型。
1、进入:一个进入的过渡(动画)决定activity中的所有的视图怎么进入屏幕。
2、退出:一个退出的过渡(动画)决定一个activity中的所有视图怎么退出屏幕。
3、共享元素:一个共享元素过渡(动画)决定两个activities之间的过渡,怎么共享(它们)的视图。
进入和退出的效果包括:
explode(分解) –进或出地移动视图,从屏幕中间
slide(滑动) -进或出地移动视图,从屏幕边缘
fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图(的效果)
使用步骤:
1.设置动画(两种方式):
a、xml设置
当你定义继承了material主题样式时,使用android:windowContentTransitions属性启用窗口的内容转换(效果)。你还可以指定进入、退出、和共享元素的转换:
<style name="myTheme" parent="android:Theme.Material"> <!-- 允许使用transitions --> <item name="android:windowContentTransitions">true</item> <!-- 指定进入和退出transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item> <!-- 指定shared element transitions --> <item name="android:windowSharedElementEnterTransition"> @transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition"> @transition/change_image_transform</item> </style>
定义transition动画:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <explode/> <changeBounds/> <changeTransform/> <changeClipBounds/> <changeImageTransform/> </transitionSet>
b、代码设置
// 允许使用transitions getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // 设置一个exit transition getWindow().setExitTransition(new Explode());//new Slide() new Fade()
在这里需要注意:
(1)setExitTransition() - 当A start B时,使A中的View退出场景的transition
(2)setEnterTransition() - 当A start B时,使B中的View进入场景的transition
(3)setReturnTransition() - 当B 返回 A时,使B中的View退出场景的transition
(4)setReenterTransition() - 当B 返回 A时,使A中的View进入场景的transition
另外如果需要修改动画时长,可以这样:
Fade fade = new Fade(); fade.setDuration(2000); getWindow().setExitTransition(fade);
2.Activity跳转方法
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
下面看一个实例demo:
具体代码:
第一个界面MainActivity.java
public class MainActivity extends Activity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_transition); } // 设置不同动画效果 public void explode(View view) { intent = new Intent(this, Transitions.class); intent.putExtra("flag", 0); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this) .toBundle()); } // 设置不同动画效果 public void slide(View view) { intent = new Intent(this, Transitions.class); intent.putExtra("flag", 1); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this) .toBundle()); } // 设置不同动画效果 public void fade(View view) { intent = new Intent(this, Transitions.class); intent.putExtra("flag", 2); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this) .toBundle()); }
activity_transition.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="explode" android:text="explode" /> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="slide" android:text="slide" /> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="fade" android:text="fade" /> </LinearLayout>
第二个界面Transitions.java
public class Transitions extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); int flag = getIntent().getExtras().getInt("flag"); // 设置不同的动画效果 switch (flag) { case 0: Explode explode = new Explode(); explode.setDuration(1000); getWindow().setEnterTransition(explode); break; case 1: Slide slide = new Slide(); slide.setDuration(1000); getWindow().setEnterTransition(slide); break; case 2: Fade fade = new Fade(); fade.setDuration(1000); getWindow().setEnterTransition(fade); getWindow().setExitTransition(fade); break; } setContentView(R.layout.activity_transition_to); }
但是,这个知识点我还有一个疑问,比如我需要从欢迎页过渡到首页,欢迎页动画过渡玩需要关闭,但是如果我直接加finish的话,过渡过程中会有一个退出的现象,希望有大神看到能帮我解决这个问题,谢谢~
相关文章推荐
- 关于图片加载优化的小技巧
- android在java代码中动态添加组件及相关布局方法(LayoutParams)
- Android中的Service的用法 开启服务,下一篇讲绑定服务
- Android 音效流程分析
- Android开发之Android Material Design Toolbar自定义随笔
- Android Service小记
- Android Studio Prettify 插件
- android获取view宽高的几种方法,解决获取高宽为0问题
- Android fragment源码全解析
- AndroidSwipeLayout源码
- Android下开机自启动C程序
- Android Menu:使用Popup Menu
- android listview 滚动到底部
- android 资料收集
- android adb
- Android:Calling startActivity() from outside of an Activity 错误
- Android Studio模块化编程实践之aar
- 从一个View向一个Activity跳转
- android 蓝牙4.0 ble 低功耗蓝牙
- Android 总结:ContentProvider 的使用