Java Android alpha动画为所有ImageView设置动画,而不仅仅是调用ImageView

Java Android alpha动画为所有ImageView设置动画,而不仅仅是调用ImageView,java,android,animation,imageview,Java,Android,Animation,Imageview,我正在为我正在学习的课程实施一个棋盘游戏。有5个“机架”(ImageView),5个播放器各1个。我希望显示当前播放器的方式是使其机架“高亮显示”(通过设置alpha值实现)。现在,只需调用setAlpha方法就可以成功地实现这一点,但是直接从一个方法转到另一个方法有点不协调,所以我想使用alpha动画。我的问题是,当当前播放器切换时,我想调暗高亮显示的机架,并高亮显示下一个机架。这两个机架的亮度都很好,但除此之外,其他机架的亮度都会“变暗”,即它会立即变亮,然后慢慢变暗。让游戏看起来很奇怪。所

我正在为我正在学习的课程实施一个棋盘游戏。有5个“机架”(ImageView),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"/>
它的名称(用星号表示):



有什么想法吗???我用这句话撞到墙了,似乎在任何地方都找不到答案。抱歉,代码太多了

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

1) 在每次调暗/高光通话时重新加载动画。 2) 尝试在绘图中不使用观察者(显式调用startAnimation)


我假设observer类正在做它看起来正在做的事情,而#2不会有什么不同,但它需要尝试。如果您使用observer允许在UI线程中调用这些操作,请创建/使用处理程序。

重新加载动画非常有效。谢谢你,伙计!知道为什么吗?似乎很奇怪,不知道。动画可能会在内部保留一个目标列表,并告诉它们进行更新?我猜。必须看看Android源代码(你可以,我有,很好;)
<?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 = 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)
    );
}