美文网首页
转场,Transition,共享元素,技术要点记录

转场,Transition,共享元素,技术要点记录

作者: Androidwu | 来源:发表于2017-12-07 15:23 被阅读0次

    学习文章链接 :

    http://rkhcy.github.io/2017/09/27/TransitionNote2/

    http://rkhcy.github.io/2017/09/21/TransitionNote/

    1.历史渊源与区别; 

    从4.0引入转入转场,无特别实现,4.4(19)引入Scene、Transition和TransitionManager,只提供同一页面不同view的转场自定义动画。5.0(21)后引入Content Transition与ShareElement Transition,前者提供Activity/Fragment的页面切换动画,后者提供Activity/Fragment切换动画期间加入特定View的转场动画,一般称特定View为共享元素。

    2.相关方法调用;

    1.Scene(场景):

    mScene0 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene0, getContext());

    mScene1 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene1, getContext());

    View view0 = inflater.inflate(R.layout.scene0, container, false);

    View view1 = inflater.inflate(R.layout.scene1, container, false);

    mScene0 = new Scene(mSceneRoot, view0);

    mScene1 = new Scene(mSceneRoot, view1);

    要注意的:R.layout.scene0与R.layout.scene1布局View Id相同的进行相关的转换,比如位置,大小,颜色等一般属性,无对应id的view视为新为新增,执行的是VIsiable的动画。

    2. Transition(转换,动画的实现) http://rkhcy.github.io/2017/09/21/TransitionNote/

    3. TransitionManager

    只有二个方法:

    1.TransitionManager.beginDelayedTransition(ViewGroup sceneRoot, Transition transition),在当前场景到下一帧的过渡效果是什么。

    2.TransitionManager.go(Scene scene, Transition transition)到指定的场景所使用的过渡动画是什么.

    4.Android 5.0  21以上的转场动画;

      1. Content Transition  无共享元素的转场;

    Intent intent =newIntent(this,ContentTransitionsActivity.class);

    ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this);

    startActivity(intent,activityOptionsCompat.toBundle());

         注意:1.转场是否执行,有时与父布局有关,CardView的子view不行(Cardview不定义transition,子viewp字义时,不执行,原因不明)。

                    2.父布局有定义transition时,子View的transition会失效。

                    3.同一布局定义多次transition时,以第一个为准。

                    4.如果某view被定义了是作为共享元素执行对象,则在Content Transition transition文件里定义的一切转场动画无效。

    2. ShareElement Transition  有共享元素转场;

    Intent intent =newIntent(ActivityA.this,ActivityB.class);

    intent.putExtra("url",planet.url);

    注意此处:与上面的调用多了二参数,可传单个或多个共享元素(View),通过另一个方法传入(ActivityOptions.makeSceneTransitionAnimation(Activity activity,Pair... sharedElements));

    ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,sharedImage,"sharedElementName (这里定义的要与ActivityB相对应View的属性android:transitionName一致)");或

    ActivityOptionsCompat.makeSceneTransitionAnimation(this,newPair(shared_image,"shared_image_"),newPair(shard_text,"shared_text_"));

    startActivity(intent,options.toBundle());

    3.transition.xml

    4.执行配置;

    1.自定义value-v21  style.xml Appthem(主题启用转场相关设置)

    2.有转场有页面主动调Finish时,要注意是调finishAfterTransition();相关的动画才会执行。

    3.Fragment切换Activity时,Activity的转场动画都正常,Fragment的转场动画不执行,原因是Fragment没有退出也没有加入。但,同类切换时不会有问题。

    // 允许使用transitionsgetWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

    // 指定进入、退出、返回、重新进入时的transitions

    getWindow().setEnterTransition(newExplode());

    getWindow().setExitTransition(newExplode());

    getWindow().setReturnTransition(newExplode());

    getWindow().setReenterTransition(newExplode());

    // 指定进入、退出、返回、重新进入时的共享transitionsgetWindow().setSharedElementEnterTransition(newChangeTransform());

    getWindow().setSharedElementExitTransition(newChangeTransform());

    getWindow().setSharedElementReturnTransition(newChangeTransform());

    getWindow().setSharedElementReenterTransition(newChangeTransform());

    相关文章

      网友评论

          本文标题:转场,Transition,共享元素,技术要点记录

          本文链接:https://www.haomeiwen.com/subject/vihdixtx.html