我正在为我正在参加的课程实施棋盘游戏。有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 = 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)
);
}
任何想法???我正在用这个打墙,似乎无法在任何地方找到答案。很抱歉代码很多!
答案 0 :(得分:0)
我不熟悉你正在使用的观察者类。尝试两件事:
1)在每个调暗/突出显示的呼叫上重新加载动画。 2)在draw中尝试没有观察者(显式调用startAnimation)。
我假设观察者课程正在进行它看起来正在做的事情,#2将没有什么区别,但是它可以尝试。如果您使用observer允许在UI线程中调用这些操作,请创建/使用Handler。