Android alpha animation动画所有的ImageView,而不是仅仅调用ImageView



我正在为我正在学习的课程执行一款桌面游戏。有5个"机架"(ImageViews),每5个球员1个。我希望显示当前玩家的方式是让他们的架子"高亮"(通过设置alpha值来实现)。现在,这可以通过调用setAlpha方法成功地完成,但是直接从一个到另一个有点不协调,所以我想使用alpha动画。我的问题是,当当前玩家切换时,我想要使高亮的机架变暗,并突出下一个机架。它在这两个架子上做得很好,但除此之外,每个其他架子都会"变暗",因为它会立即变亮,然后慢慢变暗。使游戏看起来相当怪异。所以我想改变的两个是正确的改变,但所有其他的应该只是保持暗淡。我有以下代码设置:

dim.xml:

<?xml version="1.0" encoding="utf-8"?>
<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.75"
    android:toAlpha="0.5"
    android:duration="1000"/>


highlight.xml:

<?xml version="1.0" encoding="utf-8"?>
<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.5"
    android:toAlpha="0.75"
    android:duration="1000"/>


dim和highlight方法:

dim = AnimationUtils.loadAnimation(gui, R.anim.dim); dim.setFillAfter(true);
highlight = AnimationUtils.loadAnimation(gui, R.anim.highlight); highlight.setFillAfter(true);
public Runnable dim(final Player player) {
    return new Runnable() {
          public void run () {
              dim.reset();
              player.getRack().clearAnimation();
              player.getRack().startAnimation(dim);
              //player.getRack().setAlpha(128);
              continuation();
          }
        };
}
public Runnable highlight(final Player player) {
    return new Runnable() {
          public void run () {
              highlight.reset();
              player.getRack().clearAnimation();
              player.getRack().startAnimation(highlight);
              //player.getRack().setAlpha(192);
              continuation();
          }
        };
}

调用的位置(用星号表示):

public void setup() {
    int starting = (int)(Math.random()*players.size());
    curPlayer = players.get(starting);
    observer.execute(
    *** observer.dim(players.get(0)),
    *** observer.dim(players.get(1)),
    *** observer.dim(players.get(2)),
    *** observer.dim(players.get(3)),
    *** observer.dim(players.get(4)),
    *** observer.highlight(curPlayer)
    );
}
public void draw() {
    if(deck.isEmpty()) {
        //Game over
        return;
    }
    Question q = deck.pop();
    String answer = q.answer(curPlayer);
    answers.add(answer);
    Player oldPlayer = curPlayer;
    curPlayer = players.get((curPlayer.getPlayerNum() + 1)%players.size());
    observer.execute(
        observer.ask(q.getQuestionText()),
        observer.say(answer),
    *** observer.dim(oldPlayer),
    *** observer.highlight(curPlayer)
    );
}


有什么想法吗??我在这个问题上碰壁了,似乎在任何地方都找不到答案。很抱歉写了这么多代码!

我不熟悉您使用的观察者类。试两件事:

1)在每次调暗/高亮呼叫时重新加载动画。2)尝试在没有观察者的情况下绘制(显式调用startAnimation)。

我假设观察者类正在做它看起来在做的事情,#2不会有什么不同,但它是值得尝试的。如果你使用observer来允许这些操作在UI线程中被调用,创建/使用一个Handler。

相关内容

最新更新