在运行时添加动画

Posted

技术标签:

【中文标题】在运行时添加动画【英文标题】:Add animation at run time 【发布时间】:2015-07-25 20:37:20 【问题描述】:

我想在运行时为我的AnimatedVectorDrawable 设置动画,而不使用.xml 文件。实际上,我使用 .xml 文件的方式与文档示例显示的方式相同:

AnimatedVectorDrawable

所以,我有 vector_drawable.xml contains<vector> 嵌套 <group><path> 定义了一个形状。

对于这个向量,我有 animated_vector_drawable.xml 包含 <animated-vector>android:animation 分配给 <target>

最后一步是使用<objectAnimator> 定义一个动画文件rotation.xml,该文件由animated_vector_drawable.xml 使用

一切正常,但问题出现了,当我需要使用许多不同或相似的动画创建许多不同的形状(矢量)时,因为这会生成许多 .xml 文件。

    我不能将准备好的<vector> 从一个.xml 文件包含到另一个文件(某种<include> 标签),所以我需要将相同的代码复制到另一个文件。很烦人。

    如果我想对几个 <target> 元素使用相同的动画,但每个动画都必须有 f.e.不同的延迟或任何属性值(alpharotationinterpolator...),我必须创建新的 .xml 文件,其中包含 <objectAnimator> 更改了一个属性值而不是使用相同的一个文件适当的价值。这也很烦人。

    我发现我可以使用ObjectAnimator并将alphafillColor设置为AnimatedVectorDrawable,但是当我想将其更改为translateXtranslateYrotation时出现问题或任何其他属性。没有.xml,有没有办法做到这一点。我只想访问<group>

【问题讨论】:

你如何做到这一点“我发现我可以使用 ObjectAnimator 并以编程方式为 AnimatedVectorDrawable 设置 alpha 和 fillColor” 是的。我也很想知道如何在这里以编程方式访问 ObjectAnimator。 我也很想知道是否有解决方案 嗨@Wisnia 你可以找到一些用例和代码sn-p github.com/pathikdevani/Vaividhya-2k15-Android-And-Server/blob/… 【参考方案1】:

您使用的构造函数创建具有绝对值(像素)的动画。

TranslateAnimation in = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f, 0, 0.0f);

尝试使用 Animation.RELATIVE_TO_PARENT 来满足您的需求。

【讨论】:

以上是关于在运行时添加动画的主要内容,如果未能解决你的问题,请参考以下文章

如何根据后者的进度为已经运行的动画添加动画?

动画运行时 CSS 动画显示在顶部

如何在运行时创建和运行动画?

在更新动画时运行遵循路径的 SKAction

在unity c#中改变运行时动画的速度#

当“awakeFromNib”运行时,UICollectionViewCell 内的动画不会运行。