gpt4 book ai didi

android - 如何使用 xml 中定义的动画加载 AnimatorSet

转载 作者:搜寻专家 更新时间:2023-11-01 08:30:41 24 4
gpt4 key购买 nike

我正在尝试连续播放多个动画,一个接一个。这些动画要么是简单的变换(将 ImageView 移动一定距离),要么是更复杂的帧动画。

在研究这个问题时,AnimatorSet 起初似乎是一个很好的解决方案。它允许您制作要播放的动画队列,然后按特定顺序执行它们。

    // defining an example animation
Animator anim = ObjectAnimator.ofFloat(v, "alpha", 0f)
.setDuration(100);
AnimatorSet set = new AnimatorSet();

// dictating the order in which the animations will be played
set.playSequentially(anim, skewAnim, wobbleAnim);

set.start();

问题是,据我所知,您不能定义一个 Animator 对象以从在 xml 文件中定义的动画中放入 AnimatorSet。

此外,AnimationSet(注意不同的名称)只允许您同时播放多个动画,因此此类不适用于我的目的。

有人知道在您的项目中从 xml 对象定义 Animator 对象的方法吗?或者,是否有其他方法可以完全播放一系列动画?

更新:

    AnimatorSet set = new AnimatorSet();
Animator anim1 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim1.setTarget(myView1);
Animator anim2 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim2.setTarget(myView2);

anim1.setDuration(3000);
anim2.setDuration(3000);

anim1.setInterpolator(new CycleInterpolator(5));
anim2.setInterpolator(new CycleInterpolator(5));

set.playSequentially(anim1,anim2);
set.start();

最佳答案

要从 xml 将动画加载到 AnimatorSet 中,您的 xml 应该包含 AnimatorObjects 而不是动画。然后你可以使用 AnimatorInflater 将这些 animatorObjects 加载到你的 AnimatorSet 中,如下所示:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);

xml 会像这样:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>

<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"
/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>

有关 AnimatorInflater 的更多详细信息,请参阅此链接

要在不同的 View 上播放顺序动画,您可以使用 AnimationListeners。

anim1.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
// start anim2 from here
}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}});

关于android - 如何使用 xml 中定义的动画加载 AnimatorSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com