首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重启AnimatorSet of AnimatedVectorDrawableCompat

重启AnimatorSet of AnimatedVectorDrawableCompat
EN

Stack Overflow用户
提问于 2017-07-24 08:34:47
回答 2查看 2.3K关注 0票数 5

这是我需要通过AnimatedVectorDrawableCompat实现的效果。

vector_drawable_anim.xml

代码语言:javascript
复制
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
                 android:drawable="@drawable/vector_drawable">
    <target
        android:name="star"
        android:animation="@animator/star_anim"/>
</animated-vector>

vector_drawable.xml

代码语言:javascript
复制
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="500px"
        android:height="500px"
        android:viewportHeight="500"
        android:viewportWidth="500">
    <group
        android:name="star_group"
        android:scaleX="5.0"
        android:scaleY="5.0">
        <path
            android:name="star"
            android:pathData="M 50.0,90.0 L 82.9193546357,27.2774101308 L 12.5993502926,35.8158045183 Z"
            android:strokeColor="@color/colorAccent"
            android:strokeWidth="1"/>
    </group>
</vector>

star_anim.xml

代码语言:javascript
复制
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="sequentially">

    <objectAnimator
        android:duration="1000"
        android:propertyName="trimPathStart"
        android:valueFrom="1"
        android:valueTo="0"/>

    <objectAnimator
        android:duration="1000"
        android:propertyName="trimPathEnd"
        android:valueFrom="1"
        android:valueTo="0"/>

</set>

但是AnimatorSet不能设置repeatMode

如果我设置objectAnimatorrepeatMode,第二个objectAnimator就不会出现。

我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-28 07:31:18

在一个线程中循环它,直到ImageView被销毁,怎么样?

完美工作的代码示例:

代码语言:javascript
复制
  ImageView animatedImageView = (ImageView) findViewById(R.id.iv);
  AnimatedVectorDrawableCompat animatedVectorDrawable = (AnimatedVectorDrawableCompat) animatedImageView.getDrawable();

        new Thread(new Runnable() {
            public void run() {
                while (animatedImageView != null) {
                    try {
                        animatedImageView.post(new Runnable() {
                            @Override
                            public void run() {
                                animatedVectorDrawable.start();
                            }
                        });
                        Thread.sleep(500);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

或者,您也可以使用azizbekian这个git要点代码示例后面提到的这个git要点代码示例

代码语言:javascript
复制
import android.app.Activity;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView iv = (ImageView) findViewById(R.id.pin);
        final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) iv.getDrawable();
        avd.registerAnimationCallback(new Animatable2.AnimationCallback() {
            @Override
            public void onAnimationEnd(Drawable drawable) {
                avd.start();
            }
        });
        avd.start();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2017-07-28 17:34:44

这几乎是您想要的,在纯XML中:

代码语言:javascript
复制
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together">

    <objectAnimator
        android:duration="1000"
        android:propertyName="trimPathStart"
        android:repeatCount="infinite"
        android:startOffset="1000"
        android:valueFrom="1"
        android:valueTo="0" />

    <objectAnimator
        android:duration="1000"
        android:propertyName="trimPathStart"
        android:repeatCount="infinite"
        android:startOffset="1000"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="1" />

</set>

与你想要的不同的是,路径的方向修剪回来。但看起来很棒。

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

https://stackoverflow.com/questions/45275801

复制
相关文章

相似问题

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