在转换过程中防止decorView背景闪烁

时间:2017-06-02 15:37:25

标签: android android-transitions

我正在为我的活动创建过渡。我已经设置从转换中排除导航和状态栏:

    <targets>
        <target android:excludeId="@android:id/statusBarBackground"/>
        <target android:excludeId="@android:id/navigationBarBackground"/>
    </targets>

我的问题是我使用以下方式设置应用后台:

    getWindow().getDecorView().setBackgroundColor(COLOR);

因此,当我的转换开始或结束时,我之前设置的颜色在转换之间在屏幕上闪烁。我怎么能阻止这个?我可以将任何内容放入目标吗?

1 个答案:

答案 0 :(得分:0)

来自Transition#getTargets()

  

返回此转换将自身限制为跟踪和动画的目标视图列表。如果getTargetIds()getTargets()getTargetNames()getTargetTypes()的列表为 null 为空,则此转换为不限于特定视图,并将处理场景更改层次结构中任何视图的更改。

Transitions API将使用指定getTargets()的{​​{1}},以找出需要获取的Transition。只要您没有明确指定转换的目标视图,就会获得整个视图层次结构以进行更改。因此,View也将参与过渡。相反,您可以将视图层次结构的根目录指定为目标,从而从转换中删除decorView

decorView
  

我可以将任何内容放入目标吗?

<fade xmlns:android="http://schemas.android.com/apk/res/android"> <targets> <target android:excludeId="@android:id/statusBarBackground"/> <target android:excludeId="@android:id/navigationBarBackground"/> <target android:targetId="@id/root"/> </targets> </fade> 没有 id 与之关联,这就是为什么无法通过decorView进行操作的原因。您可以为当前窗口充气/获取xml并以编程方式添加/排除目标:

Transition