You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Transition Manager多视图延迟转场失效:底部视图无动画

解决Transition Manager底部视图无动画的问题

嘿,我知道你卡在哪了!你的代码里有两个关键问题导致底部视图没动画效果:

  • 连续调用TransitionManager.beginDelayedTransition()会覆盖之前的过渡配置——这个方法的作用是为接下来的视图变更操作绑定动画,你两次调用后,只有最后一个transitionBottom会生效,transitionTop的设置直接被丢弃了。
  • 视图可见性的修改时机不对:应该先配置好过渡动画、调用beginDelayedTransition,再去改变视图的可见状态,这样TransitionManager才能捕获到视图变化并应用对应的动画。

修复后的完整代码

private void showImageOptions() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        // 创建顶部和底部的滑动动画
        Slide transitionTop = new Slide(Gravity.TOP);
        Slide transitionBottom = new Slide(Gravity.BOTTOM);
        
        transitionTop.setDuration(500);
        transitionTop.addTarget(imageNameLayout);
        
        transitionBottom.setDuration(500);
        transitionBottom.addTarget(constraintOptions);
        
        // 用TransitionSet组合两个动画,让它们同时执行
        TransitionSet transitionSet = new TransitionSet();
        transitionSet.addTransition(transitionTop);
        transitionSet.addTransition(transitionBottom);
        
        // 只调用一次beginDelayedTransition,绑定组合后的过渡动画
        TransitionManager.beginDelayedTransition(rootLayout, transitionSet);
    }
    
    // 在调用beginDelayedTransition之后修改视图可见性
    if (imageNameLayout.getVisibility() == View.GONE) {
        imageNameLayout.setVisibility(View.VISIBLE);
        constraintOptions.setVisibility(View.VISIBLE);
    } else {
        // 补充隐藏逻辑,让动画支持双向触发
        imageNameLayout.setVisibility(View.GONE);
        constraintOptions.setVisibility(View.GONE);
    }
}

关键说明

  • TransitionSet能把多个过渡动画组合在一起,让顶部和底部视图各自执行对应的滑动动画,不会互相覆盖。
  • 必须确保视图状态修改在beginDelayedTransition之后,这样TransitionManager才能正确捕获视图变化并触发动画。
  • 我补充了隐藏布局的逻辑,这样你的动画在收起视图时也能正常生效。

内容的提问来源于stack exchange,提问作者Junaid Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:28:10