比较android应用程序中布局的背景色与kotlin

比较android应用程序中布局的背景色与kotlin,android,android-studio,android-layout,kotlin,Android,Android Studio,Android Layout,Kotlin,我想做一个if语句,其中我将比较布局背景色的颜色,与kotlin类似: val viewPaint = (background.getBackground() as PaintDrawable).paint val colorARGB = viewPaint.color if(colorARGB == Color.GREEN){ btn_touch.setOnClickListener { counter += 1

我想做一个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进行比较?

我不知道你的代码的背景是什么,但肯定的是,
javax.swing
不受Android支持

您想使用android.view来代替
getBackground()

删除此导入,如果它要求导入某些内容,请添加
Android
一个,但它不应要求任何内容,因为它来自
Android.view


背景是布局id

然后您应该使用kotlin的
合成


import kotlinx.android.synthetic.main.your_layout.*

我回答了,所以我有了更多的上下文:-)你不应该直接比较背景颜色,而应该存储你自己的应用程序状态,这样你就可以控制它在做什么,并让背景做出相应的反应

enum class State {
    ON,
    OFF
}
从GitHub repo中,更改循环以更新状态:

  when (Random.nextBoolean()) {
       true -> state = State.ON
       false -> state = State.OFF
  }
然后使用该状态更新用户界面:

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
    }
}

警告是什么?swing:未解析的引用android API未使用
javax.swing
。请更改导入。swing不受支持,IDbackground为布局ID,则不进行任何导入。
import kotlinx.android.synthetic.main.your_布局。*
它已导入。您知道如何将背景颜色与Kotlinca进行比较吗?您可以共享您的完整代码,或者将其放在github上,以便我可以查看一下?这是主要的活动代码,这是所有的项目谢谢:)我遇到了关于协程实现的错误,但我修复了它。我正在添加核心实现,但我不知道第二个
实现'org.jetbrains.kotlinx:kotlinx coroutines core:1.3.3'
实现'org.jetbrains.kotlinx:kotlinx coroutines android:1.3.3'