android转场动画总结
1.Android5.0以前转场动画
Activity
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
Fragment
supportFragmentManager.beginTransaction().setCustomAnimations(R.anim.fragment_enter, R.anim.fragment_exit);
2.从Android 5.0 之后,可以用 ActivityOptions 来实现
2.1 首先了解下Activity主要的进场和出场方法,后面会结合ActivityOptions用到
getWindow().setEnterTransition()
设置进场动画getWindow().setExitTransition()
设置出场动画getWindow().setReturnTransition()
设置返回activity时动画getWindow().setReenterTransition()
设置重新进入时动画
2.2 ActivityOptions的主要方法
- 最普通的,效果和过去的 overridePendingTransition 一样
makeCustomAnimation(Context context, int enterResId, int exitResId)
- 参照 Activity 上的某个 View,新 Activity 从指定大小放大到最大显示。
makeScaleUpAnimation(View source, int startX, int startY, int startWidth, int startHeight)
- 和makeScaleUpAnimation 的区别是,不再是放大页面上的一个 View,而是指定一张图,在转场时,放大这张图片。
makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)
- 一个点圆形渐变到全部显示,参数含义和 makeScaleUpAnimation 的一样
makeClipRevealAnimation(View source, int startX, int startY, int width, int height)` - Scene 就是场景,两个 Activity 中的某个 View 协同完成过渡动画。
makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)
- Scene 就是场景,两个 Activity 中的某些 View 协同完成过渡动画。
makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements)
2.3 makeSceneTransitionAnimation 共享元素动画
Scene
就是场景,两个Activity
中的某些View
(可以是Activity
自身) 协同完成过渡动画。以整个Activity作为View协同完成过渡动画
Intent intent = new Intent(SharedElementActivity.this, SharedElementCommonActivity.class);
ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(SharedElementActivity.this);
startActivity(intent, activityOptions.toBundle());
// 分解
getWindow().setEnterTransition(new Explode().setDuration(2000));
getWindow().setExitTransition(new Explode().setDuration(2000));
// 滑动
getWindow().setEnterTransition(new Slide().setDuration(2000));
getWindow().setExitTransition(new Slide().setDuration(2000));
// 渐入渐出
getWindow().setEnterTransition(new Fade().setDuration(2000));
getWindow().setExitTransition(new Fade().setDuration(2000));
- 以两个Activity中的某个View协同完成过渡动画
Intent intent = new Intent(activity, SharedElementDetailActivity.class);
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, new Pair<>(view, VIEW_NAME_IMAGE));
ActivityCompat.startActivity(activity, intent, activityOptions.toBundle());
// 设置共享动画的view
ViewCompat.setTransitionName(imageView, VIEW_NAME_IMAGE);
// 延迟共享动画的执行
postponeEnterTransition();
imageView.setBackgroundResource(R.drawable.cy_berpunk_2077_1);
// 图片加载完成后启动共享过渡动画
startPostponedEnterTransition();
2.4 如果在返回的时候共享的元素有发生变化,如何处理让动画更流程
页面A
- 在
Activity
中通过ActivityOptionsCompat
启动对应的目标Activity
,传入对应的共享元素View
以及元素名称
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, view, "对应的元素flag");
startActivity(intent, options.toBundle());
- 在
Activity
通过setExitSharedElementCallback设置在返回Activity时设置对应的view,让动画显得更自然
setExitSharedElementCallback(new SharedElementCallback() {@Overridepublic void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {sharedElements.clear();names.clear();//放置对应的imageView则动画更自然sharedElements.put("对应的元素flag", imageView);}
});
- 通过Activity中的onActivityReenter回调,获取需要展示的对应的View的标记
@Override
public void onActivityReenter(int resultCode, Intent data) {super.onActivityReenter(resultCode, data);bundle = new Bundle(data.getExtras());
}
页面B
- Activity进入的时候设置对应的共享元素view以及共享元素flag
setEnterSharedElementCallback(new SharedElementCallback() {@Overridepublic void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {sharedElements.clear();sharedElements.put("对应的元素flag", view);}
})
- 延缓动画执行,可以等待资源准备好之后开启动画
supportPostponeEnterTransition();
- 退出的时候需要通知A页面需要配合的元素信息
@TargetApi(22)@Overridepublic void supportFinishAfterTransition() {Intent data = new Intent();data.putExtra("index", mPager.getCurrentItem());setResult(RESULT_OK, data);super.supportFinishAfterTransition();}@Overridepublic void onBackPressed() {Intent data = new Intent();data.putExtra("index", mPager.getCurrentItem());setResult(RESULT_OK, data);super.supportFinishAfterTransition();}
- 开启动画
supportStartPostponedEnterTransition();
- 在动画结束后关闭
supportFinishAfterTransition()
android转场动画总结相关推荐
- android 转场动画 监听,Android 中的转场动画及兼容处理
Android 中的动画有很多,除了在一个界面上使用帧动画.属性动画将一个或多个 View 进行动画处理以外,还可以用于两个界面之间过渡.跳转.在 Android 5.0 之前,我们已经有了 over ...
- Android转场动画(View Activity ARouter)
为什么要使用转场动画?在页面切换或者UI展示的时候,如果没有设计转场动画,那么状态场景的切换就是瞬间发生的,这样就非常突兀,没有视觉效果,所以在App开发的过程中,设计转场动画,是必不可少的. 1.揭 ...
- android 转场动画 共享元素,关于android:四步通过Glide实现共享元素无缝转场效果...
读完这篇文章, 你就会晓得应用Glide等图片加载库实现共享元素转场成果,以及如何解决各种可能加载状态.通过共享转场动画,能够晋升利用交互体验,让用户应用起来更愉悦. 共享元素转场成果是Materia ...
- android转场动画,让你的APP瞬间绚丽起来
友好的交互体验能够吸引眼球,android API 21(5.0)后系统内置了Activity之间的切换动画,不仅可以让用户看起来舒服,而且实现起来也特别简单. 一.通过overridePending ...
- 腾讯T7手记:Android转场动画的前世今生!
前一段时间做图片查看器的升级时,在打开图片查看器的时,找不到好的过渡方式. 有位大佬给我推荐了Android最新的Material Motion动画,虽然最终没有给我们的App安排,但给我学习Mate ...
- Android转场动画,Avtivity转场动画;
转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...
- android 元素共享动画,android转场动画--共享元素(Shared Element)
什么是共享元素呢?可以理解为当页面跳转是,看起来一个View属于界面A又属于界面B. 看一下下边这个效果: 在这个转场动画中,图片和文字都是共享元素,具体怎么实现这种效果呢? Step1 首先需要先在 ...
- 高逼格Android转场动画
前言 转场动画在交互上非常有优势,本文从转场动画的使用场景和方法起,最后是实现掘金中用户头像的转场动画. 转场动画适用的版本 Activity transition APIs 只有在Android 5 ...
- 高逼格Android转场动画,轻松实现掘金用户头像转场动画
前言 转场动画在交互上非常有优势,本文从转场动画的使用场景和方法起,最后是实现掘金中用户头像的转场动画. 转场动画适用的版本 Activity transition APIs 只有在Android 5 ...
最新文章
- Android DataBinding 入门了解 到实现一个buttton的点击事件
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
- Ensemble Methods——python
- 中国古代天文星象学的入门书:《步天歌》
- 选项卡,下拉菜单操做时的页面数据更新,highcharts,d3 结合。
- python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)
- Web Api 内部数据思考 和 利用http缓存优化 Api
- 隐藏了十年的 Sudo 漏洞曝出:无需密码就能获取 root 权限
- 系统学习深度学习(二十七)--CTC
- offset Dimensions 详解
- 强连通分量的一种类 Tarjan 算法以及Tarjan算法推导初探
- ios和Android的PK
- MySql使用if语句例子
- 一级网站域名与二级域名的区别,如何注册网站一级域名
- mac 破解安装 navicat
- 关于AIX上VMO调整参数的若干说明
- 健身环1536级小结:相当适合码农的锻炼方式
- TI Zigbee Light Link 参考设计
- 如何查Unity3D编辑器崩溃原因
- SQLAlchemy学习教程
热门文章
- 打开 McAfee VirusScan v8.5i 的“访问保护”时请慎重
- Spring Security(一)
- 易优cms首页被劫持后台进不去怎么办
- Linux 命令(文件和目录管理 - zip/unzip)
- image 微信小程序flex_微信小程序flex布局案例(1)
- 五年java开发面经分享,注意这些细节让你offer拿到手软
- 2022年中级会计实务考试复习题及答案
- CentOS搭建sock5和pptp服务器
- 直尺刻度识别_在线尺子
- matlab调用函数出错,[MATLAB基础] matlab 调用函数老是出错怎么回事??高手请指点一下...