2010-06-23 78 views
0

我能夠讓動畫在模擬器上工作 - 但是我的問題是它動畫了一秒鐘,然後在完成動畫後返回原來的位置。我怎樣才能阻止這種情況發生。在Android代碼中的動畫翻譯

這是我的動畫我的對象:

private void doAnimations() { 

    logo.setVisibility(View.INVISIBLE); 
    logo.setBackgroundDrawable(null); 
    logo.setMaxHeight((logo.getHeight()/2)); 
    Animation animation = new TranslateAnimation(0, 0, 0, -200); 
    usernameEdit.startAnimation(animation); 
} 

任何幫助表示讚賞。謝謝。

回答

1

如何避免這種情況發生。

在動畫上註冊偵聽器。然後,當聽者被告知動畫已完成時,請對實際佈局進行一些操作以使您的更改永久生效。

+0

嗨,馬克。 感謝您的幫助。但在這種情況下,我想添加一個偵聽器到我正在設置動畫的按鈕 - 但是我希望它在動畫之前和之後都能點擊。 從你的回答中,我發現只註冊一個新的聽衆不會這樣做 - 你的意思是什麼對於acutal佈局做些什麼?我沒有爲按鈕設置x,y位置,因爲它與其他事物的線性佈局相同,所以我可以如何設置新的監聽器(在按鈕被動畫之後)。 – hwrdprkns 2010-06-23 23:55:47

+0

@hwrdprkns:「但是在這種情況下,我想將監聽器添加到我正在設置動畫的按鈕 - 但是我希望在爲其設置動畫之前和之後單擊它。」 'AnimationListener'和'OnClickListener'是不同的東西。 「你的意思是什麼對實際佈局做些什麼?」動畫是暫時的。如果你希望你的改變是永久的,你需要在適當的小部件上修改'LayoutParams'。換句話說,暫時忽略動畫,並找出如何使用佈局更改來重新定位窗口小部件。然後,在動畫結束時執行此操作。 – CommonsWare 2010-06-24 00:03:46

+0

「修改LayoutParams」 - 我會盡力做到這一點。感謝您的建議。 – hwrdprkns 2010-06-24 21:10:52

1

雖然animation.setFillAfter(true);是一個良好的開端,但是從我的經驗,我已經看到,儘管通過這種方法,其中動畫停止,但仍控制保留在其前面是可見的觀點並轉移到地方...

爲了說明這一點,假設你在位置A有一個按鈕「btn1」,動畫在位置B停止,現在當你設置animation.setFillAfter(true);,動畫停止後,視圖將在位置B可見,但點擊它不會工作出。雖然如果你點擊位置A(沒有任何東西可見),但btn1的onClickListener方法將被調用...

因此,正如我前面所說,視圖會顯示(在位置B),而不是控件(它仍然位於位置A)...所以它最好你去馬克的(CommonsWare的)設置動畫偵聽器的方法,並在動畫停止時做出所需的更改...

希望這有助於!

+0

謝謝。我理解你的意思 - 如果它的代碼更清晰,我會以這種方式實現它。 – hwrdprkns 2010-06-23 17:33:50