详解Android(共享元素)转场动画开发实践
程序员文章站
2023-12-10 19:54:40
最近零碎时间一直在研究opengl,所以没怎么进行分享,以后可能大部分时间会学习系统底层\ndk\vr\ar等领域,话不多少,今天来分享个小的动画效果.
效果如下...
最近零碎时间一直在研究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; }
总结
大家可以看到,这里面的代码不仅做了适配,同时设置了动画监听,无需使用三方库即可实现你自己的转场动画.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。