首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >环路AnimatorSet

环路AnimatorSet
EN

Stack Overflow用户
提问于 2013-07-05 15:39:27
回答 4查看 15.6K关注 0票数 8

我做了一个由三个AnimatorSet组成的ObjectAnimator,我想接着重复一遍。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="0"
        android:valueTo="5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="600"
        android:valueFrom="5"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="0"
        android:valueType="floatType"/>

</set>

但是如果我将CycleInterpolator设置为AnimatorSet,因为动画师将依次启动

在API级别11中添加的公共空setInterpolator (TimeInterpolator插值器) 为此TimeInterpolator的所有当前子动画设置AnimatorSet。

所以我尝试通过设置一个侦听器来重新启动AnimatorSet,但是它停止了几毫秒,重新启动AnimatorSet的效果是显而易见的。

代码语言:javascript
运行
复制
a.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation)
    {
        animation.start();
    }
});

我能做些什么来循环它(除了构建一个庞大的ObjectAnimators列表或者使用线程和处理程序编写我自己的动画)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-05 16:05:57

解决这个特殊情况的方法是创建一个AnimatorSet,其中第一个项要旋转一半,第二个项要保持旋转。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="rotation"
        android:duration="150"
        android:valueFrom="0"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="5"
        android:repeatMode="reverse"
        android:repeatCount="infinite"
        android:valueType="floatType"/>

</set>
票数 5
EN

Stack Overflow用户

发布于 2014-04-16 08:11:59

在迫切需要这个功能,原来有人已经找到了解决方案。

http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/

所有的功劳都归原作者所有。

代码语言:javascript
运行
复制
mAnimationSet.addListener(new AnimatorListenerAdapter() {

@Override
public void onAnimationEnd(Animator animation) {
    super.onAnimationEnd(animation);
    mAnimationSet.start();
}

});
mAnimationSet.start();
票数 7
EN

Stack Overflow用户

发布于 2013-07-05 15:45:59

您需要将重复模式设置为AnimationSet,请参见:

android:repeatMode

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17492523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档