2011-11-04 78 views
0

我正在爲我參加的課程實施棋盤遊戲。有5個「機架」(ImageViews),每個玩家1個。我希望展示當前玩家的方式是讓他們的機架「突出顯示」(通過設置alpha值來實現)。現在,只需調用setAlpha方法即可成功完成此操作,但從一個方向直接移動到另一個方向有點麻煩,所以我想使用一個alpha動畫。我的問題是,當前玩家切換時,我想調暗突出顯示的機架,並突出顯示下一個機架。這對兩個機架來說確實很好,但是另外,每個其他機架都會「昏暗」,因爲它會立即變亮並慢慢變暗。使遊戲看起來相當怪異。所以我想改變的兩個都是正確的改變,但所有其他的都應該保持不變。我有以下的代碼爲它設置:

dim.xml:Android alpha動畫動畫所有ImageView而不僅僅是調用ImageView

<?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

我不熟悉你使用的觀察者類。嘗試兩件事:

1)重新加載您的每個調暗/突出顯示調用的動畫。 2)試圖在draw中沒有觀察者(顯式調用startAnimation)。

我假設觀察者類正在進行它看起來正在做的事情,而#2不會有所作爲,但它是可以嘗試的。如果您使用observer來允許在UI線程中調用這些操作,請創建/使用Handler。

+0

重新加載動畫就像魅力一樣工作。謝了哥們!任何想法,爲什麼?似乎很奇怪 – user1028885

+0

不知道。動畫可能會在內部保存目標列表並告訴他們更新?我正在猜測。將不得不看Android的來源(你可以,我有,這是很好;) –