详解Android(共享元素)转场动画开发实践
作者:任珉豪 发布时间:2021-09-28 21:33:41
标签:android,转场,共享动画
最近零碎时间一直在研究OpenGL,所以没怎么进行分享,以后可能大部分时间会学习系统底层\NDK\VR\AR等领域,话不多少,今天来分享个小的动画效果.
效果如下
基本知识
其实Android的转场动画由来已久,比如平常开发安卓的时候界面切换 都是右进右出,这样的效果,就是早期的转场动画,在5.0之后安卓官方支持了共享元素的效果,那么问题来了,5.0以后该怎么适配?
准备步骤
定义两个activity,界面跳转是从A到B.
ActivityA定义一个控件View,在跳转时传入到Pair里面,详细代码如下:
switch (v.getId()) {
case R.id.tv_open_video:
SigleVideoPlayer.startMe(mContext,tvOpenVideo);
break;
}
ActivityB详细代码如下
public static void startMe(BaseMvpActivity mContext, View view) {
Intent intent = new Intent(mContext, SigleVideoPlayer.class);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
Pair pair = new Pair<>(view, IMG_TRANSITION);
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
mContext, pair);
ActivityCompat.startActivity(mContext, intent, activityOptions.toBundle());
} else {
mContext.startActivity(intent);
mContext.overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
}
并在oncreate之后添加如下代码:
private void initTransition() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
postponeEnterTransition();
ViewCompat.setTransitionName(button, IMG_TRANSITION);
addTransitionListener();
startPostponedEnterTransition();
} else {
// 处理你自己的逻辑
}
}
设置动画监听
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private boolean addTransitionListener() {
transition = getWindow().getSharedElementEnterTransition();
if (transition != null) {
transition.addListener(new OnTransitionListener(){
@Override
public void onTransitionEnd(Transition transition) {
super.onTransitionEnd(transition);
// 动画完成之后 处理你自己的逻辑
transition.removeListener(this);
}
});
return true;
}
return false;
}
总结
大家可以看到,这里面的代码不仅做了适配,同时设置了动画监听,无需使用三方库即可实现你自己的转场动画.
来源:http://www.jianshu.com/p/881f2257350b?utm_source=tuicool&utm_medium=referral


猜你喜欢
- C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际
- 在C#中用同一个dataset保存从数据库中取出的多张表:cmd.CommandText = "select * from tab
- Spring AOP后置通知修改响应httpstatus1.定义Aspect/** * 响应体切面 * 后置通知修改httpstatus *
- 在使用官方的showModalBottomSheet这个组件时到目前为止遇到了三个比较坑的地方1. 无法直接设置圆角;2. 组件最多只能撑满
- 这篇文章主要介绍了Java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考
- 本文实例为大家分享了Android实现多条目加载展示的具体代码,供大家参考,具体内容如下展示效果依赖testCompile 'jun
- 本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下主要功能及优点1.收到验证码短信后,自动提取短信中
- PS:本文使用jdk1.7解析1.Object类 的equals 方法 /** &
- HTTP 头处理HTTP 头是 HTTP 请求和响应中的重要组成部分。在创建 HTTP 请求时需要设置一些 HTTP 头。在得到 HTTP
- java中的线程状态🥇在操作系统层面,一个线程就两个状态:就绪和阻塞状态.但是java中为了在线程阻塞时能够更快速的知晓一个线程阻塞的原因,
- 今天朋友圈又火了,听说原因是 @腾讯官网 就能得到一顶绿色的帽子,啊呸,是一个好看的国庆节头像,可是听说没一会就502了,那么我们自己动手实
- 项目结构项目路径可以自己定义,只要路径映射正确就可以pom.xml <properties> <spring.versio
- 数据加解密的实现方式多种多样,在mybatis环境中数据加解密变得非常简单易用,本文旨在提供参考,在生产中应尽可能完成单元测试,开展足够的覆
- 今天在优化项目中的考勤同步功能时遇到将考勤机中的数据同步到数据库,两边都是几万条数据的样子,老代码的做法差不多半个小时,优化后我本机差不多4
- 关于Path之前写的也很多了,例如path绘制线,path绘制一阶,二阶和三阶贝塞尔路径,这些都是path的基本用法。今天我要带大家看的是P
- 本文基于jdk1.8进行分析。ReentrantLock是一个可重入锁,在ConcurrentHashMap中使用了ReentrantLoc
- /// <summary> /// 读写INI文件的类。
- 引言:编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。第1招:以空间换
- 在一些音乐类应用中, 经常会展示随着节奏上下起伏的波纹信息, 这些波纹形象地传达了声音信息, 可以提升用户体验, 那么是如何实现的呢? 可以
- 一、背景目前的Springboot,当发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦。Springbo