android - 将android应用程序中布局的背景颜色与kotlin进行比较
问题描述
我想做一个 if 语句,在其中我将比较我的布局背景颜色的颜色,与 kotlin 类似:
val viewPaint = (background.getBackground() as PaintDrawable).paint
val colorARGB = viewPaint.color
if(colorARGB == Color.GREEN){
btn_touch.setOnClickListener {
counter += 1
textCounter.text = counter.toString()
}
}
它不起作用我如何将背景颜色与 kotlin 进行比较?
解决方案
我回答了你的另一个问题,所以我有更多的上下文:-) 你应该存储你自己的应用程序状态,而不是直接比较背景颜色,这样你就可以控制它在做什么,并让背景做出相应的反应.
enum class State {
ON,
OFF
}
从您的 GitHub 存储库中,更改循环以更新状态:
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
然后使用该状态更新您的 UI:
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
因此,您可以再次使用状态来响应按钮单击:
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
完整的例子:
import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.foo.*
import kotlinx.coroutines.*
import java.util.concurrent.TimeUnit
import kotlin.random.Random
class FooActivity : AppCompatActivity() {
private var state = State.OFF
private var counter: Int = 0
private var running = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.foo)
val loop = true
GlobalScope.launch(Dispatchers.IO) {
while (loop) {
while (running) {
delay(TimeUnit.SECONDS.toMillis(Random.nextLong(5)))
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
withContext(Dispatchers.Main) {
updateUI()
}
}
}
}
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
}
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
override fun onResume() {
super.onResume()
running = true
}
override fun onPause() {
running = false
super.onPause()
}
enum class State {
ON,
OFF
}
}
推荐阅读
- python-3.x - 通过查找列表中连续对象的时间增量来修改 numpy datetime64 对象列表的最佳方法是什么?
- oracle19c - 顶点 19 上的 Resive DatePicker
- jekyll - 无法预览 Github Pages 站点。我错过了什么?
- python-3.x - 如何在 GridSearchCV 中使用 Matthews 系数进行评分?
- nativescript - 升级到 '@nativescript/core' 后找不到 Xxport 'topmost'
- javascript - ReactJs with Bootstrap:多步表单验证,使用 Formik 和 Yup
- android - Android RxJava 访问订阅外的变量
- php - php DOMDocument 级别
- c# - C# 代码输出无穷大并给出错误答案
- python - 在 >Python 3.7 中使用 importlib(或其他东西)复制 imp.load_dynamic?