欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解Android(共享元素)转场动画开发实践

程序员文章站 2023-11-23 23:09:10
最近零碎时间一直在研究opengl,所以没怎么进行分享,以后可能大部分时间会学习系统底层\ndk\vr\ar等领域,话不多少,今天来分享个小的动画效果. 效果如下...

最近零碎时间一直在研究opengl,所以没怎么进行分享,以后可能大部分时间会学习系统底层\ndk\vr\ar等领域,话不多少,今天来分享个小的动画效果.

效果如下

详解Android(共享元素)转场动画开发实践

基本知识

其实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;
}

总结

大家可以看到,这里面的代码不仅做了适配,同时设置了动画监听,无需使用三方库即可实现你自己的转场动画.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。