我有一个包含3行和3列的表格布局。总共我有9个具有设置背景的ImageView。所有这些图像视图最初都是隐藏的,但却使其不可见。我有执行淡入淡出动画的方法。当我在一个imageview上调用我的动画功能时它工作正常。但是,如果我从for循环调用动画函数,则所有图像视图都会同时进行动画处理。我需要这个顺序发生。
E.g。 for(int i = 0; i< 9; i ++){ startanimation(imageViews [I]); }
void startanimation(){ 在给定的imageview上淡出淡出 在一张图片上正常工作 }
注意:我已经声明了一个imageViews数组,所以我不需要使用java反射来动态访问imageview。
int [] imageViews = {R.id.ImageView01,R.id.ImageView02,R.id.ImageView03,R.id.ImageView04,R.id.ImageView05,R.id.ImageView06,R.id.ImageView07 ,R.id.ImageView08,R.id.ImageView09}
我已经尝试过Thread.sleep(xxx)以及处理程序,但仍然无法实现我的目标。基本上,如果我将imageview位置和图像发送到startanimation(),它应该淡化淡出该imageview位置的图像并仅在完成整个动画后返回主活动。现在它似乎就像它在所有iamgeviews上完成fadein fadeout动画后才返回。请帮忙。
答案 0 :(得分:1)
我在游戏中做到了这一点。 首先,您需要将所有按钮存储到地图中:
private Map<Integer, Button> buttonViews = new HashMap<Integer, Button>();
然后,当您创建按钮时,将它们全部添加到地图中:
buttonViews.put(0, myButton);
然后你需要调用一个递归方法showButtons(0),如
showButtons(int button){
//set button visible
buttonViews.get(button).setVisibility(View.VISIBLE);
//set button animation
Animation myAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fadeIn);
buttonViews.get(button).startAnimation(myAnim);
//then use onAnimationEnd
myAnim.setAnimationListener(new AnimationListener() {
public void onAnimationEnd(Animation animation...
在onAnimationEnd中调用showButtons(button ++) 当所有按钮都耗尽时,请断开此递归循环。 如果你需要在每个动画之间进一步延迟,那么你可以在onAnimationEnd中使用postdelay方法:Various ways to handle timing in Android
答案 1 :(得分:0)
您是否考虑过使用myAnim.setStartOffset(buttonIndex*animDuration)
?
答案 2 :(得分:-1)
如果您想单独淡化每张图像,则必须为每张图像配备一个计时器。现在,你只有一个计时器。
否则,当前一张图像完全褪色时,你必须保留一张图像表并淡化每张图像。也就是说,制作一个外部循环来跟踪现在正在褪色的图像并增加图像指针 - 也就是说,转到下一个图像 - 当前所有图像都完成了淡入淡出。
HTH。这听起来很复杂,但事实并非如此。在循环中,只是不要触摸任何其他图像而不是当前正在淡化的图像。
- 皮特