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