Activity过渡动画
Android5.0之前我们一般会使用overridePendingtransition(int inId, int outId)来给Activity增加一些切换动画,但效果差强人意。Android5.0中提供了三种Transition类型:
进入:一个进入的过渡动画决定Activity中的所有视图怎么进入屏幕。
退出:一个退出的过渡动画决定一个Activity中的所有视图怎么退出屏幕。
共享元素:一个共享元素过渡动画决定两个Activities之间的过渡,怎么共享它们的视图。
其中进入和退出效果包括:
explode(分解):从屏幕中间进或出
slide(滑动):从屏幕边缘进或出
fade(淡出):通过改变屏幕上视图的不透明度达到添加或者移除视图
先看app效果:
操作步骤:
1.ActivityA跳转ActivityB时调用:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
2.在ActivityB的setContentView()方法前调用
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
3.设置ActivityB的进入动画
getWindow().setEnterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setEnterTransition(new Fade());
4.设置ActivityB的退出动画
getWindow().setExitTransition(new Explode());
getWindow().setExitTransition(new Slide());
getWindow().setExitTransition(new Fade());
5.设置共享元素的动画
在ActivityA和ActivityB的布局文件中给需要共享的元素(如:imageview)设置如下属性并且保证命名完全相同
android:transitionName="share"
(1)共享一个元素代码:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, view, "share").toBundle());
(2)共享多个元素代码:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view, "share"), Pair.create(fab, "fab")).toBundle());
好啦,接下来直接上代码:
MainActivity
public class MainActivity extends AppCompatActivity {private Intent intent;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//分解 public void explode(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 0);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}//滑动 public void slide(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 1);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}//淡出 public void fade(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 2);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}// 共享 public void share(View view) {View fab = findViewById(R.id.fab_button);intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 3);//创建单个共享元素 /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { startActivity(intent, ActivityOptions.makeSceneTransitionAnimation( this, view, "share").toBundle()); }*/ //创建多个共享元素 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view, "share"), Pair.create(fab, "fab")).toBundle());}} }
MAinActivity布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <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"/> <Button android:layout_width="match_parent" android:layout_height="100dp" android:onClick="share" android:text="share" android:transitionName="share"/> <Button android:id="@+id/fab_button" android:layout_width="56dp" android:layout_height="56dp" android:background="@color/colorAccent" android:elevation="5dp"/> </LinearLayout>
SecondActivity
public class SecondActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);int flag = getIntent().getExtras().getInt("flag");switch (flag) {case 0:getWindow().setEnterTransition(new Explode());getWindow().setExitTransition(new Explode());break;case 1:getWindow().setEnterTransition(new Slide());getWindow().setExitTransition(new Slide());break;case 2:getWindow().setEnterTransition(new Fade());getWindow().setExitTransition(new Fade());break;case 3:break;}}setContentView(R.layout.activity_second);}}
SecondActivity布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <View android:id="@+id/holder_view" android:layout_width="match_parent" android:layout_height="300dp" android:background="@color/colorPrimary" android:transitionName="share"/> <Button android:id="@+id/fab_button" android:layout_width="56dp" android:layout_height="56dp" android:layout_alignParentEnd="true" android:layout_below="@id/holder_view" android:layout_marginTop="-26dp" android:background="@color/colorAccent" android:elevation="5dp" android:transitionName="fab" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/holder_view" android:paddingTop="10dp"> <Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="60dp" android:layout_alignParentStart="true" android:layout_marginTop="10dp"/> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="60dp" android:layout_alignParentStart="true" android:layout_below="@id/button4" android:layout_marginTop="10dp"/> </RelativeLayout> </RelativeLayout>
Activity过渡动画相关推荐
- Android——浅析Activity过渡动画
Activity过渡动画 前言 分解动画 效果视频 解析 滑动动画 效果视频 解析 淡出动画 效果视频 解析 共享元素 共享单个元素 效果视频 解析 共享多个元素 效果视频 全部代码 第一个Activ ...
- android 官方默认动画,Android动画一:Activity过渡动画详细实现原理
虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition() 通用方式的过渡动画还是很常用. 原理分 ...
- android 页面过渡动画,Activity过渡动画的实现方法
1.使用overridePendingTransition方法实现Activity跳转动画 overridePendingTransition方法是Activity中提供的Activity跳转动画方法 ...
- 安卓 activity过渡动画
Activity过渡的五中实现 1.使用overridePendingTransition方法实现Activity跳转动画 overridePendingTransition方法是Activity中 ...
- android自定义过渡动画,11.自定义过渡动画
11.1 问题 应用程序需要自定义Activity切换或Fragment切换时产生的过渡动画. 11.2 解决方案 (API Level 5) 要修改Activity间的过渡动画,可以使用overri ...
- android过渡动画旋转,炫酷的Android过渡动画
[桃花潭水深千尺,不及汪伦送我情] 不知道大家有没有发现,Android版的掘金有下面这个小小动画:点击作者头像跳转到作者的详情页,而作者头像会从当前界面通过动画过渡详情页界面. image 知识贫乏 ...
- Android Transition过渡动画
在Android 4.4 Transition 就已经引入了,但在Android 5.0(API 21)之后,Transition 被更多的应用起来.相对于View Animation或Propert ...
- Activity跳转的过渡动画全解析
ActivityOptionsCompat 前因: //在旧版本里面,我们切换Activity大多都是使用的api overridePendingTransition(enterAnim, exitA ...
- android窗口动画和过渡动画(activity和dialog)
from:http://blog.sina.com.cn/s/blog_ba23fa6f0102v32g.html 窗口动画和过渡动画是指在窗口(activity或dialog)切换时的显示动画,窗口 ...
最新文章
- 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署
- 19.VS属性管理器窗口不见了怎么办?
- POJ - 2186 Popular Cows(强连通缩点)
- python choose语句作用_理解闭包是如何与变量作用域相互影响的
- C/C++ OpenCV设置感兴趣区域ROI
- PyTorch 深度学习:32分钟快速入门——ResNet
- C Prime Plus 第一章 初识C语言
- python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)
- 打包docker镜像推送到远程服务器并部署到k8s
- unwrapped oracle,求助CentOS 5.4 +oracle 11g R2 ASM 模式 安装后 EM 启动后登陆不进去!
- 跟alex学python_跟Alex学Python之
- LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
- 制造业ERP系统如何帮助企业做好生产物料管控?
- Kup Buty Under Armour także czynników bocznych
- Win10配置pytorch深度学习环境
- 集群(Cluster)
- Web scraper使用教程-进阶用法(二)-爬取二级页面内容
- [engine]加载速度拉满的direct storage
- 我是如何走上程序员这条道路的
- WML语言基础(WAP建站)二(转)