配置过渡

使用过渡来定义面板之间的变化。您可以定义过渡,以描述如何以及何时在面板的两个变体之间进行更改。您可以为每个面板定义一个过渡列表。

使用 <Transitions> XML 标记作为单个 <TaskPanel><DecorPanel> 配置中一个或多个 <Transition> 定义的容器。您可以使用此标记定义一组动画规则,以控制面板何时以及如何从一种不同的变体更改为另一种。

XML 属性

<Transitions> 标记可以为以下子 <Transition> 元素定义默认值:

属性 状态 说明
<defaultDuration> 可选

指定要应用于所有子级 的默认时长(以毫秒为单位)

未明确设置时长属性的 <Transition> 元素。

如果未指定此属性,系统会使用 DEFAULT_DURATION 常量(通常为 300 毫秒)。

defaultInterpolator 可选

引用 Android 插值器 XML 资源 ID。例如,@android:anim/accelerate_decelerate_interpolator。该插值器用作未明确设置插值器属性的所有子 <Transition> 元素的默认插值器。

如果未指定默认插值器,系统通常会默认使用 AccelerateDecelerateInterpolator

XML 子元素

<Transitions> 的子元素是 <Transition>,这是用于定义 PanelState 变体之间特定动画路径的核心元素。多个 <Transition> 元素可以嵌套在单个 <Transitions> 块中。

示例代码

在此示例中,fromVariant 是可选项。如果未定义,则使用当前变体。如果定义了 fromVariant,则仅当所有参数都匹配时才使用该过渡。参数在事件和 fromVariant 中指定。

<Transitions defaultDuration="400"
         defaultInterpolator="@android:anim/linear_interpolator">
  <Transition fromVariant="closed_app"
              toVariant="opened_app">
    <Event id="app_opened" panel="application_panel" />
  </Transition>
</Transitions>

过渡

过渡描述了如何为面板的两个变体之间的视觉状态变化添加动画效果。过渡概述了从一个变体到另一个变体的路径。 为此,过渡会指定详细信息,例如要应用的动画以及触发动画所需的事件。

对于面板,过渡可以为边界、可见性和 Alpha 等属性定义动画。如果未指定自定义动画师,则使用默认动画师。

XML 属性

<Transition> 标记使用多个属性来定义动画的特征以及触发动画的条件。

XML 子元素

<Event> 定义了可触发转换的事件的属性。

与相应事件关联的面板的唯一标识符。
属性 状态 说明
<id> 强制 用于激活触发器的事件的唯一标识符。
<panelId> 可选 与活动相关的面板的唯一标识符。
componentName 可选 与此事件关联的组件名称。
packageName 可选 与事件关联的软件包名称。

示例代码

<Transitions defaultDuration="400"
        defaultInterpolator="@android:anim/accelerate_interpolator">
  <!-- A transition from 'closed_app' to 'opened_app' variant, triggered by 'open_app_event' -->
  <Transition fromVariant="closed_app"
              toVariant="opened_app">
    <Event id="app_opened" panel="application_panel" />
  <Transition>

  <!-- A transition from 'opened_app' to 'closed_app' variant, using a custom animator -->
  <Transition fromVariant="opened_app"
              toVariant="closed_app"
              animator="@animator/close_app">
    <Event id="_System_PanelEmptyEvent"
           panelId="application_panel" />
  <Transition>
</Transitions>