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

Android动画重复

翟兴邦
2023-03-14

我有三个视图具有相同的翻译动画。使用0-2的随机数,三个视图中的一个是动画。我很难重复动画和每个动画的延迟(应该在2000ms左右)。

Animation move = AnimationUtils.loadAnimation(this, R.anim.move);
View view1 = (View) findViewById(R.id.view1);
View view2 = (View) findViewById(R.id.view2);
View view3 = (View) findViewById(R.id.view3);

Random color_box_fall_random = new Random();
int random_int = (color_box_fall_random.nextInt(2));

for (int i = 0; i < 10; i++){
    if (random_int == 0){
        view1.startAnimation(move);
    }
    else if (random_int == 1){
        view2.startAnimation(move);
    }
    else{
        view3.startAnimation(move);
    }
}

move.xml

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">

    <translate
        android:startOffset="2000"
        android:fromYDelta="-200"
        android:toYDelta="50%p"
        android:duration="2000" />
</set>

共有1个答案

汤飞羽
2023-03-14

您需要使用<code>AnimationListener

Animation move;
View view1;
View view2;
View view3;
Random color_box_fall_random;
int i;
Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    move = AnimationUtils.loadAnimation(this, R.anim.move);
    view1 = findViewById(R.id.view1);
    view2 = findViewById(R.id.view2);
    view3 = findViewById(R.id.view3);

    color_box_fall_random = new Random();

    handler = new Handler();

    move.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            i++;
            if(i < 10) {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        switch(color_box_fall_random.nextInt(2)){
                            case 0:
                                view1.startAnimation(move);
                                break;
                            case 1:
                                view2.startAnimation(move);
                                break;
                            case 2:
                                view3.startAnimation(move);
                                break;
                        }
                    }
                }, 2000);
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

    switch(color_box_fall_random.nextInt(2)){
        case 0:
            view1.startAnimation(move);
            break;
        case 1:
            view2.startAnimation(move);
            break;
        case 2:
            view3.startAnimation(move);
            break;
    }
}
 类似资料:
  • 我一直试图重复一个特定的动画,但动画只运行一次,不会重复本身。

  • 对于android新手,我想制作一些平滑的动画。 我在设备上有一个文件,其中包含效果,每个效果都是一个动画。该文件告诉我何时播放效果以及效果持续时间。 问题是我不能链动画师动态设置: 现在我如何从我的AnimatorSet()列表中得到mainAnimatorSet();每个动画从最后一个动画的结尾开始。 这不起作用。谢谢

  • 我正在尝试让文本视图逐个放大/缩小4倍。它只工作一次,然后就死了。

  • 主要内容:本节引言:,1.帧动画概念以及用法,2.使用示例:,3.本节示例代码和Gif帧提取工具下载,本节小结:本节引言: 从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity,当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类,逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property),而本节给大家带来的是第一种动画——逐帧动画的一个基本

  • 我正在动画一个或多个div滚动到视图中。我是通过将动画css拆分成几个类(见下文)来做到这一点的。 动画div最初将具有类'.mpact-animated'和'.mpact-animated-pause'。div还将具有以下类之一'.mpact-shake'、'.mpact-heartbeat'或'.mpact-bounce'。这些动画类是由用户选择的,所以我不知道哪一个是要实现的。 当页面滚动时

  • 主要内容:本节引言:,1.补间动画的分类和Interpolator,2.各种动画的详细讲解,3.写个例子来体验下,4.动画状态的监听,5.为View动态设置动画效果,6.为Fragment设置过渡动画,7.为Activity设置过场动画,8.写个进入APP后登陆注册按钮从底部弹出动画效果的例子:,9.本节代码示例下载,本节小结:本节引言: 本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指