在android中的计时器1分钟后将背景颜色更改为红色
Posted
技术标签:
【中文标题】在android中的计时器1分钟后将背景颜色更改为红色【英文标题】:to change background color to red after 1 min of timer in android 【发布时间】:2016-04-20 18:44:09 【问题描述】:我正在尝试在计时器 1 分钟后将背景颜色更改为红色,并且我想在 android 中的计时器 1 分钟 30 秒后将背景颜色更改为黄色。这是我正在尝试的代码,但它不起作用。
public void run()
timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
updatedTime = timeSwapBuff + timeInMilliseconds;
int secs = (int) (updatedTime / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (updatedTime % 1000);
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
if(mins==1)
View someView = findViewById(R.id.screen);
//View root = someView.getRootView();
someView.setBackgroundColor(Color.RED);
customHandler.postDelayed(this, 0);
;
【问题讨论】:
【参考方案1】:更简单
final View someView = findViewById(R.id.screen);
someView.postDelayed(new Runnable()
public void run()
someView.setBackgroundColor(Color.RED);
,TimeUnit.MINUTES.toMillis(1));
【讨论】:
【参考方案2】:我认为您应该在 runOnUiThread
中处理 UI 视图。
if(mins==1)
runOnUiThread(new Runnable()
@Override
public void run()
View someView = findViewById(R.id.screen);
//View root = someView.getRootView();
someView.setBackgroundColor(Color.RED);
);
【讨论】:
【参考方案3】:试试这个:
private static final ScheduledExecutorService worker =
Executors.newSingleThreadScheduledExecutor();
Runnable task = new Runnable()
public void run()
View someView = findViewById(R.id.screen);
someView.setBackgroundColor(Color.RED);
;
worker.schedule(task, 60, TimeUnit.SECONDS);
希望对你有帮助。
发件人: https://***.com/a/3072338/5778152
【讨论】:
@seemaDesaiworker
在这里定义private static final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
现在它没有显示任何错误,但背景颜色没有变为红色。
所以在 Ui 线程 runOnUiThread
上运行它来改变颜色【参考方案4】:
我前几次做过类似的事情。 首先进入你的布局(可以是RelativeLayout或其他):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_ >
<RelativeLayout
android:id="@+id/screen"
android:layout_
android:layout_>
//…what you want
</RelativeLayour>
然后在你的活动中:
//global variables
private long addedTime;
private Handler handler;
private RelativeLayout screen;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
screen = (RelativeLayout) findViewById(R.id.screen);
private void start()
addedTime = 60;
long changeTime = (Calendar.getInstance().getTimeInMillis()/1000) + addedTime;
handler = new Handler()
@SuppressWarnings("ResourceType")
@Override
public void handleMessage(Message msg)
if (addedTime == 60)
screen.setBackgroundColor(Color.parseColor("#ff0000"));//red
addedTime = 120;
else
screen.setBackgroundColor(Color.parseColor("#ffff00"));//yellow
addedTime = 60;
changeTime = changeTime + addedTime;//add time for the new color change
handler.postDelayed(getRunnable(changeTime), 1000);
super.handleMessage(msg);
;
handler.postDelayed(getRunnable(changeTime), 1000);
private Runnable getRunnable(final long time)
return new Runnable()
@Override
public void run()
Message message;
Calendar calendar = Calendar.getInstance();
if (calendar.getTimeInMillis() / 1000 == time)
message = new Message();
handler.sendMessage(message);
else
handler.postDelayed(getRunnable(time),1000);
;
上面的例子会产生一个无限循环,所以要小心。 希望对你有用
【讨论】:
【参考方案5】:您可以以 RGB 方式执行此操作。如果你想在时间里轻轻地改变颜色,你也可以这样检查。
val countDownTimer = object : CountDownTimer(totalTime, 20)
override fun onFinish()
override fun onTick(millisUntilFinished: Long)
val pr = (totalTime - millisUntilFinished).toFloat() / totalTime
if(pr <= 1f && pr>=0f)
binding.pbTimerRect.progress = pr
if ((pr * 255).toInt() <= 255)
if(pr<=0.5)
binding.lytTimerBackGround.background.setTint(Color.rgb((pr*2* 255).toInt(), 255, 0))
else
binding.lytTimerBackGround.background.setTint(Color.rgb(255,(255-((pr-0.5)*2* 255).toInt()), 0))
else
if(pr<0)
onFinish()
【讨论】:
以上是关于在android中的计时器1分钟后将背景颜色更改为红色的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton
是否可以将控制台中的文本颜色和背景颜色更改为不同的颜色,同时仍然在同一行上? C++