我有一項活動正在評估對參考軌道實時演唱的人。我想要的是,當用戶點擊練習按鈕時,在屏幕上倒計時5秒鐘,屏幕上的所有組件都將停用。我也想在屏幕上顯示倒計時。這個想法是在我的Activity
視圖頂部有一個透明的灰色疊加層,並顯示倒計時。 我正在考慮在Android-SDK中執行AsyncTask
和CountDownTimer
的邏輯。什麼可以是實現這個可視化的最佳方式?實現覆蓋活動的倒數計時器
回答
我終於可以實現這一目標而無需使用CountDownTimer
。爲了這個目的,我創建延伸的AsyncTask
如下一類:
public class CountdownTask extends AsyncTask<Integer, Integer, Integer> {
private ICountdownView mCountdownView;
private static final String TAG = "CountdownTask";
public CountdownTask(ICountdownView countdownView) {
this.mCountdownView = countdownView;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Code to set up the timer ...
mCountdownView.initCountdownView();
}
@Override
protected Integer doInBackground(Integer... params) {
// setting the default number of steps ..
int countdownSteps = 5;
// reading the number of steps if mentioned in the parameters
if (params.length >= 1 && params[0] != null) {
countdownSteps = params[0];
}
// setting the default step duration in milliseconds ..
int stepDur = 1000;
// reading the step duration if mentioned in the parameters
if (params.length >= 2 && params[1] != null) {
stepDur = params[1];
}
for (int i = 0; i < countdownSteps; i++) {
publishProgress(countdownSteps - i);
sleep(stepDur);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mCountdownView.updateCountdownView(values[0]);
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
mCountdownView.destroyCountDownView();
}
private void sleep(int mDelay) {
try {
Thread.sleep(mDelay);
} catch (InterruptedException e) {
Log.e(TAG, e.toString());
}
}
}
用於更新到用戶界面中,我已經創建了一個接口ICountdownView
。無論哪種活動都希望倒計時需要實現此接口,然後使用new CountdownTask(this)
初始化CountdownTask
,其中this
引用活動類的引用。接口ICountdownView
如下:
public interface ICountdownView {
void initCountdownView();
void updateCountdownView(int timeLeft);
void destroyCountDownView();
}
在您的活動,您將實現所有這些方法,通過任何你想要的動畫。在我的情況下,在initCountdownView()
,我初始化一個透明背景,沒有標題的對話框。在每個updateCountdownView(int timeLeft)
上,我都會顯示對話框中的剩餘時間並對其進行動畫處理。在destroyCountDownView()
,我dismiss()
對話框,並繼續我需要做的下一步。希望這可以幫助!
PS:
mCountdownTask.execute(5, 1000);
這上面的語句使得倒計時在5個步驟每個步驟爲1000來執行:可以用的步驟的數量並且在像毫秒提到的每個步驟的持續時間發起CountdownTask
毫秒(1秒)。如果用戶沒有提供任何參數,這也是CountdownTask
的默認行爲。
去CountDownTimer
,因爲它提供了即用的滴答作響的功能:
new CountDownTimer (5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
countDownView.setText((int)(millisUntilFinished/1000) + "sec left");
}
@Override
public void onFinish() {
overlay.setVisibility(GONE);
}
}.start()
我很清楚這個部分。我想問的是如何實現視圖。目前,我正在使用帶有透明背景的'PopupWIndow'作爲我的活動。我在'AsyncTask'的'doInBackground()'方法內實現'CountDownTimer'。我選擇這樣做是因爲我想從主Activity中分離出這個邏輯,並在其他地方重複使用倒計時器的相同實現。現在我得到的問題是,它向我展示了一個運行時異常'由於:java.lang.RuntimeException:無法在未調用Looper.prepare()'的線程內創建處理程序。 – Swapnil
我不會在AT中啓動一個CDT,因爲它們都在線程中運行,所以會導致一定的開銷。然後你必須照顧UI線程:在AsyncTask中,只能在'onPre/PostProcess()'方法中影響主線程。另一方面,你可以通過將覆蓋視圖作爲構造函數參數傳遞給它來生成CDT實現。 – injecteer
是的。謝謝你的提示。這有幫助! – Swapnil
- 1. 覆蓋倒計時
- 2. 實現持久倒數計時器
- 3. 在scala上實現倒數計時器
- 4. 如何實現倒數計時器
- 5. Android倒數計時器,繼續定時器上的新活動
- 6. 如何實現水平滾動倒數計時器?
- 7. 如何在擺動中實現倒數計時器
- 8. 更有效的倒數計時器/時鐘實現方式?
- 9. MKCircle覆蓋倒
- 10. 倒計時 - iPhone倒數計時器
- 11. 修復倒計時倒數計時器
- 12. 實時倒數計時器在Python
- 13. 實現倒計時計時器的重置按鈕
- 14. 倒計時計時器在UILabel中的實現?
- 15. 自動倒計時器和動態倒計時器android
- 16. 使用Moment.js實現24小時倒數計時器
- 17. 倒數計時器結束時結束活動並呼叫另一個活動
- 18. 活動覆蓋。 WindowManager.LayoutParams
- 19. 在不同的活動中捕捉倒數計時器
- 20. 倒數計時器
- 21. 倒數計時器?
- 22. 倒數計時器
- 23. 倒數計時器
- 24. 實時倒計時
- 25. 活動不是從一個倒數計時器
- 26. Android的活動覆蓋parentactivity
- 27. 的Joomla活動覆蓋
- 28. 如何在ios中爲攝像頭實現倒數計時器?
- 29. 在Objective-C實現一個倒數計時器?
- 30. 倒數計時器 - 想要實現完成通知
好邏輯bro .. + 1 –