在我的應用程序中,我得到了一個Activity
,它從數據庫接收一定數量的條目。對於每個條目,製作一個按鈕並添加到佈局中。我希望按鈕從底部到頂部「推入」。我通過對API示例push_up_in.xml
進行了輕微修改來實現這一目標。現在令人不安的是,它看起來像是所有的Button
都被同時推入。爲了看起來更「不同步」,我會在每次推動Button
之間稍微延遲一段時間。Android:從底部按下按鈕延遲
到目前爲止,相關的代碼如下所示
public void onCreate(Bundle icicle){
super.onCreate(icicle);
getDestinationLayout();
setContentView(linearLayout);
challengeName = getIntent().getExtras().getString("challengeName");
context = this;
datasource = new CustomDataSource(this);
showGames();
}
(...)
private void getDestinationLayout(){
linearLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.main_all_entries, null);
scrollView = (ScrollView) linearLayout.findViewById(R.id.rel_all_football);
buttonHolder = (LinearLayout) scrollView.findViewById(R.id.lin_all_buttonholder);
}
// is called from showGames() after taking fetched entries, sorted them and so on
private void createAndAddButtons(){
// the fetched entries are taken in another method
for(int i=0; i<fetchedEntries.size(); i++){
(1)
entryButton = new Button(this) //entryButton is global
// do some layout stuff
entryButton.setAnimation(AnimationUtils.loadAnimation(this, R.anim.push_up_in));
(2)
buttonHolder.add(entryButton);
}
}
現在我想,沒問題,我只是把一個Thread.sleep(x)
點(1)分別在點(2),以獲得這種效果,但在這兩種情況下Activity
本身的開始都被延遲了(對於x * fetchedEntries.size()
millis來說似乎是這樣),並且按鈕仍然被推在一起。在以前的嘗試,我的onCreate就像
public void onCreate(Bundle icicle){
super.onCreate(icicle);
challengeName = getIntent().getExtras().getString("challengeName");
context = this;
datasource = new CustomDataSource(this);
showGames();
setContentView(linearLayout);
}
(而getDestinationLayout()
是showGames()
內),問題是,我第一次添加的按鈕,然後調用setContentView(linearLayout)
(我現在覺得是錯的的確是接近我的目標),但正如所說的,實際的版本不是我想要的。我怎樣才能做到這一點?顯然,這個問題是使用Thread.sleep(x)
,但另一方面我完全不明白爲什麼,因爲邏輯上的程序應該是
- >setContentView(linearLayout)
=>活動將顯示在屏幕上
- > LOOP
- >
Thread.sleep(x)
=>程序等待X米利斯
- >創建和添加按鈕=>按鈕i在
REPEAT推TILL END
編輯:
這裏是動畫xml文件 「push_up_in.xml」
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>
<alpha android:fromAlpha="0.5" android:toAlpha="1.0" android:duration="1000" />
</set>
但是然後(所以我想乍看之下),按鈕的單個添加之間沒有延遲,對不對?將該處理程序放在for循環中會更好嗎?或者從foor循環中的處理程序調用一些延遲函數?編輯:只需閱讀您的編輯,謝謝澄清! –
只需在你的循環中添加Thread.sleep() –
好吧,我完全按照你的建議,從onCreate獲取所有條目,並從onStart()調用createAndAddButtons()。在那裏,我在上面的答案中放置了一個處理程序,並在循環中放入了Thread.sleep(),但問題仍然存在。爲了測試它,我放入了一個Thread.sleep(1000),並且由於在我的測試中db有15個條目,所以在任何獲取displayd之前它會休眠15秒。在此15秒之後,活動顯示並且按鈕被「一起」推入。我忽視了什麼? –