这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
本篇文章主要介绍了详解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.phperz.com/article/17/0913/345827.html