gpt4 book ai didi

java - 动画后运行动画,android studio

转载 作者:行者123 更新时间:2023-11-30 00:39:14 25 4
gpt4 key购买 nike

我是 android 编程的新手,我在 android studio 中一个接一个地运行动画时遇到问题。问题是我没有指定我需要的动画数量,这取决于计数器。

package com.example.smartpc.memorygame;

import android.graphics.drawable.TransitionDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.Random;

public class MemoryGame extends AppCompatActivity {

ImageView imgRed;
ImageView imgGreen;
ImageView imgBlue;
Button btnStart;

ArrayList<Integer>array=new ArrayList<>();
int counter=3;
int i=0;
Boolean flag=false;

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

imgRed=(ImageView)findViewById(R.id.imgRed);
imgGreen=(ImageView)findViewById(R.id.imgGreen);
imgBlue=(ImageView)findViewById(R.id.imgBlue);
btnStart=(Button)findViewById(R.id.btnStart);

final RotateAnimation animation=new RotateAnimation(0f,360f, RotateAnimation.RELATIVE_TO_SELF,0.5f,
RotateAnimation.RELATIVE_TO_SELF,0.5f);
animation.setDuration(1000);
// animation.setRepeatCount(1);

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

@Override
public void onAnimationEnd(Animation animation) {
if (flag==true) {
i++;
Random rand = new Random();
int number = Math.abs(rand.nextInt() % 3);
btnStart.setText(Integer.toString(i) + " " + Integer.toString(number));
if (number == 0) {
imgRed.startAnimation(animation);
} else if (number == 1) {
imgGreen.startAnimation(animation);
} else if (number==2){
imgBlue.startAnimation(animation);
}
if (i == counter - 1) {
i = 0;
flag=false;
return;
}
}
}

@Override
public void onAnimationRepeat(Animation animation) {
;
}
});

imgRed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgRed.startAnimation(animation);
flag=false;
}
});

imgGreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgGreen.startAnimation(animation);
flag=false;
}
});

imgBlue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgBlue.startAnimation(animation);
flag=false;
}
});

btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// imgGreen.setImageResource(R.drawable.transition);
// ((TransitionDrawable) imgGreen.getDrawable()).startTransition(3000);
flag=true;
Random rand = new Random();
int number = Math.abs(rand.nextInt() % 3);

if (number == 0) {
imgRed.startAnimation(animation);
}
else if (number == 1) {
imgGreen.startAnimation(animation);
}
else if (number==2) {
imgBlue.startAnimation(animation);
}
// btnStart.setText(Integer.toString(i) + " " + Integer.toString(number));
}
});
}
}

在 onAnimationEnd() 方法中是问题。它生成数字并启动良好的动画,但它也会启动另一个(随机的,没有规则是哪个)。有谁知道如何解决这个问题?另外,计数器不是固定的,我想稍后在代码中更改它。

最佳答案

我会尽力解释。

当进程运行到onAnimationEnd()时,这确实意味着动画结束了。它就像等待 onAnimationEnd() 一样。然后调用startAnimation(sameAnimation),可以看到方法源码。

/**
* Start the specified animation now.
*
* @param animation the animation to start now
*/
public void startAnimation(Animation animation) {
animation.setStartTime(Animation.START_ON_FIRST_FRAME);
setAnimation(animation);
invalidateParentCaches();
invalidate(true);
}

注意这段代码:animation.setStartTime(Animation.START_ON_FIRST_FRAME);

如果将开始时间设置为-1,我们之前运行的动画将被重置。哎呀,因为我们说动画还没有真正完成,所以它会作为最后一次重新播放。

运行你的进度,如果你看到有两张图片同时旋转,其中一张一定是最后一张旋转的。

如果你想一个接一个地运行一个动画,你可能不会在onAnimationEnd()中使用相同的动画。或者您可以使用 View.clearAnimation() 清除附加到 View 的所有动画。

如果能帮到你,我很高兴。如果有任何错误,请添加评论。

关于java - 动画后运行动画,android studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809570/

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