【问题标题】:Changing the background colour of an ImageView randomly using AsyncTask使用 AsyncTask 随机更改 ImageView 的背景颜色
【发布时间】:2018-04-14 08:08:47
【问题描述】:

我正在制作一款基于反应的 Android 游戏,包含多个关卡。

在级别 1 中,我希望 ImageView 以快速的随机间隔从红色变为绿色,用户要在绿色时单击 ImageView 来得分。

我正在使用一个单独的类来运行 AsyncTask,以随机更改 ImageView 的背景颜色。该代码包含在一个 while 循环中,该循环正在检查 levelPoints 是否达到 50(这些点根据 level1 类中的 OnClick 事件上升)。

问题来了 - 背景颜色改变一次,在 while 循环期间不会改变。我已经使用Log.v找出了随机数和级别点的状态,这似乎表明循环工作正常。

该项目是 WIP,但我认为这部分应该处于我可以通过单击绿色 50 次结束循环来测试它是否工作的阶段。不是这样的。

感谢任何关于为什么在 while 循环期间颜色不会改变的帮助。我已经在 StackOverflow 和其他网站/论坛中搜索过类似问题,但找不到任何类似性质的问题。

这是 GitHub 上相关文件的链接

https://github.com/CodeAddiction/Reactor

【问题讨论】:

  • 你需要重绘视图。该值已更改,但不会在您的 UI 中重绘/反映
  • 是在 UI 线程中使用 invalidate() 并在 AsyncTask 类中使用 postinvalidate() 完成的吗?
  • 我不确定这些方法。但是您可以在异步任务中添加回调方法以在主线程中运行。然后你可以从主线程更新你的背景。

标签: android random colors android-asynctask


【解决方案1】:

因为您要从在后台线程上运行的 doInBackground 方法更新颜色,所以您应该从 postExecute 方法更新 ui 上的任何内容,或者如果您必须从 doinbackground 方法更新,您应该使用 publishProgress 方法和 onProgressUpdate 方法。

postExecute 、 publishProgress 、 onProgressUpdate 方法在 UI 线程上运行,而 doInBackground 方法在后台线程上运行。

如果您想从 doInBackground 方法更新任何内容,您应该在调用 onProgressUpdate 方法的 doInBackground 方法中使用 publishProgress 方法。

【讨论】:

  • 感谢您的回复 Abhilash,当我将 while 循环代码放在 post Execute 方法中时,屏幕变灰,没有任何反应。如果我遗漏了什么,你能告诉我吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
相关资源
最近更新 更多