当前位置: 首页 > 知识库问答 >
问题:

使用同一动画设置多个视图的动画

柳逸春
2023-03-14

我有一个简单的动画文件:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:ordering="sequentially" >
<objectAnimator
    android:duration="1000"
    android:propertyName="x"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:valueTo="-50"
    android:valueType="floatType" />

基本上,这会将一个组件沿X轴向左滑动50 dp。我已经成功地将它附加到一个组件上,它工作得非常完美,但是当我尝试同时将它附加到多个组件上时,动画只适用于最后一个组件。

例如:我有5张牌。AI敌人从手中随机选择一张牌。但是我想动画敌人“捡”卡。这就是动画发挥作用的地方。

比如说:

AnimatorSet cardSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.pick_card);

for(int i=0; i<enemyCards.size(); i++){
   cardSet.setTarget(enemyCards.get(i));
   cardSet.start();    
}

这里的目标是循环阵列中的每张卡,并将其滑出X轴。但动画只出现在最后一张牌上(阵列中的第五张牌)

此外(这是一个大胆的原因,人们不再阅读大段,有人一直在编辑我的格式)-我希望每次卡滑出时都有一个延迟。所以循环应该是这样的:

loop{
    animate card 1
    delay
}

或者

动画文件应该是这样的

android:delay="100"

我一直在努力,但收效甚微

共有2个答案

上官彬
2023-03-14

这是一个在文本编辑器中编写的草图代码,它可能有语法错误,但您将得到以下概念:

AnimatorSet cardSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.pick_card);

List<AnimatorSet> animators = new ArrayList<>(enemyCards.size());

for (int i = 0, size = animators.size(); i < size; ++i) {
    animators.add(cardSet.clone());
}

final int step = 100;
int delay = 0;

for (int i = 0, size = enemyCards.size(); i < size; ++i) {
    AnimatorSet set = animators.get(i);
    set.setTarget(enemyCards.get(i));
    set.setStartDelay(delay);
    delay += step;
    set.start();    
}
公孙联
2023-03-14

您可以在某些视图组中收集视图,然后仅为父视图设置动画,以便为所有子视图设置动画?

 类似资料:
  • 当前为 5.4 版本,稍后将升级到 5.5。在 5.5 中,本节内容被拆分成了多个小节。 使用动画视图 在 Unity 中,动画视图用于预览和编辑游戏对象的动画剪辑。动画视图可以通过菜单 Window -> Animation 打开。 查看游戏对象上的动画 动画视图和层级视图、场景视图以及检视视图紧密耦合。类似于检视视图,动画视图将显示当前选中对象的动画的时间轴和关键帧。你也可以在层级视图或场景视

  • 我有两个两个文本字段displayNameTF和emailTF。 我想设置一个文本字段的动画,使其超过另一个文本字段的顶部。 我已经将emailTF的中心存储在emailTFOrigin中,我正在将displayNameTF的中心设置为它,并设置所需的布局动画。 我得到的动画是,默认情况下,文本字段彼此相距约5点,displaynameTF直接跳到emailTF的顶部,并将动画恢复到其原始位置。

  • 我有一个UIView,其中有一个UILabel作为子视图。 现在我用动画改变UIView的宽度(改变约束的常量属性)并在UIView动画中调用layoutIfNeed...( 视图正在正常调整大小,但UILabel(子视图)将字体大小更改为“结束”大小,但没有像uiview那样正确设置动画。 根据WWDC 2012会话,如果仅更改superview的常量,则子视图应设置动画。 UILabel的最小

  • 使用动画曲线 属性列表 在一段 动画剪辑 中,任意动画属性都可以拥有 动画曲线,也就是说,动画剪辑控制着属性如何随时间变化。在 动画视图(左侧)的属性列表区域,罗列出了当前所有参与动画的属性。当动画视图处于关键帧清单模式,每个属性的值是一个条直线轨道,但是在曲线模式下,正在改变的属性值被可视化为曲线图形。无论你用哪种模式查看,曲线一直存在 — 关键桢清单模式只是简单的关键帧数据预览。 在 曲线模式

  • 我有一个自定义视图CustomLayout(蓝色,自定义UIView),该视图包含3个子视图,通过使用约束(布局锚定)垂直对齐,每个视图按照以下顺序对齐: 1视图:幻灯片(红色,自定义UIView) 我想,当我单击按钮(黄色)时,如果使用动画打开,SlideLayout(红色)的高度大小会增加,如果关闭,则会减少。和其他视图必须在动画期间更改位置,如果SlideLayout增加/减少,则父视图(C

  • 我对SpriteKit非常陌生。我有一组节点,需要一起移动到每个节点的不同点,在所有节点的动画完成后,我想做一些其他的事情。 我以前是用组件制作的。一个块提供了我需要的东西。但在SpriteKit中,每个节点都有自己的动作,并自行设置动画。我找不到任何精灵节点的块动画。所以我无法控制动画的完成。 希望,我很清楚。提前谢谢。