0
A
回答
2
@BaptisteM,而不是使用的AsyncTask這個的,你可以使用處理器和Runnable的這個樣子,
private void startColorTimer() {
mColorHandler.postDelayed(ColorRunnable, interval);
timerOn = true;
}
private Handler mColorHandler = new Handler();
private Runnable ColorRunnable = new Runnable() {
@Override
public void run() {
coloredTextView.setTextColor(getRanColor());
if (timerOn) {
mColorHandler.postDelayed(this, interval);
}
}
};
0
這個問題已經被問到,我開始回答,但一個主持人關閉它,所以我把我的例子放在這裏。
這個例子每1000毫秒隨機地改變一個TextView的顏色。 間隔可以更改。
package com.your.package;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
TextView coloredTextView;
long interval = 1000; //in ms
boolean timerOn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coloredTextView = (TextView) findViewById(R.id.colorTextView);
startColorTimer();
}
private void startColorTimer(){
new ColorTimer().execute();
timerOn=true;
}
private void stopColorTimer(){
timerOn=false;
}
private class ColorTimer extends AsyncTask<Void, Void, Void> {
public ColorTimer() {
timerOn=true;
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(interval);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
coloredTextView.setTextColor(getRanColor());
if(timerOn) new ColorTimer().execute();
}
private int getRanColor() {
Random rand = new Random();
return Color.argb(255, rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
}
@Override
protected void finalize() throws Throwable {
super.finalize();
timerOn=false;
}
}
}
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="fr.rifft.bacasable.MainActivity">
<TextView
android:id="@+id/colorTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:text="Colored Text View"
android:textSize="30sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
我希望它可以幫助。
0
您可以使用一個處理器類: https://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,長)
postHandler()統計時間在後臺,並在事件發送到主線程時。
此外,您還可以使用復發的: https://en.wikipedia.org/wiki/Recursion_(computer_science)
final int[] colors = new int[]{
0xFF0000FF,
0xFF00FF00,
0xFFFF0000,
0xFFFF00FF,
};
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
findViewById(R.id.bg_to_change).setBackgroundColor(colors[new Random().nextInt(colors.length)]);
handler.postDelayed(this, 500);
}
}, /*This is your X*/ 500);
0
您可以使用TimerTask的這樣做。
從開始計時的onResume()
@Override
public void onResume() {
super.onResume();
startColor();
}
和的onStop停止定時器()
@Override
public void onStop() {
super.onStop();
if (timer != null)
timer.cancel();
if (task != null)
task.cancel();
}
而且下面的代碼添加到您的活動。
TimerTask task;
Timer timer;
private void startColor() {
task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
coloredTextView.setBackgroundColor(getRanColor());
}
});
}
private int getRanColor() {
Random rand = new Random();
return Color.argb(255, rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
}
};
timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 1000);
}
0
,你可以這樣做:
Handler mHandler = new Handler();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
//change color
}
});
}
}, 0, 5* 1000); // 5s
停止它由:
timer.cancel();
1
試試這個,你可以使用TimerTask
: - >可以安排一次性任務或定時器重複執行。
Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new RemindTask(), 0, 3000); // delay*/
private class RemindTask extends TimerTask
{
int current = viewPager.getCurrentItem();
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
coloredTextView.setTextColor(getRanColor());
}
});
}
}
相關問題
- 1. 如何在swift 2中設置隨機顏色的計時器?
- 2. 隨機更改顏色
- 3. 如何隨機更改divs顏色隨機一段時間?
- 4. 更改設計時的顏色菜單
- 5. 導航鏈接隨機更改顏色
- 6. 如何設置隨機顏色
- 7. 更改倒計時器的顏色
- 8. 如何從顏色數組中隨機設置jbutton顏色?
- 9. 如何在每次產卵時隨機更改SKShapeNode的顏色?
- 10. 更改材質設計AppCompat ActionBar顏色
- 11. 隨機化顏色的一個jqPlot圖
- 12. 如何將位圖更改爲另一種隨機顏色?
- 13. 如何隨機更改屏幕上每個像素的顏色
- 14. 將隨機css顏色更改爲一個DIV的背景和另一個DIV的邊框頂部顏色
- 15. jquery隨機顏色
- 16. 在PopMenu(設置)中更改顏色
- 17. 更改顏色並使用設置API
- 18. 隨機引用機器 - 點擊jQuery改變顏色
- 19. 設置一個計時器來控制何時執行隨機變量
- 20. 在特定時間後更改顏色
- 21. stm32動態計時器設置更改
- 22. 單擊後更改顏色
- 23. 如何在jQuery設置後更改:-moz-placeholder顏色?
- 24. 隨機獲取Android材質設計顏色
- 25. 更改Windows工作流設計器中活動的顏色?
- 26. 更改Visual Studio窗體設計器的背景顏色?
- 27. 隨機顏色生成器(全部,不只是一個單詞)
- 28. 更改背景顏色,然後在計時器用完時返回原始顏色
- 29. 改變點擊顏色爲隨機顏色的文本顏色(按鈕)
- 30. Emacs - 每小時隨機顏色主題?
是不是最好使用Handler和的Runnable,而不是實現一個完整的AsyncTask類? – Ivan