android - 将android应用程序中布局的背景颜色与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
            textCounter.text = counter.toString()


        }
    }

它不起作用我如何将背景颜色与 kotlin 进行比较?

最佳答案

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

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

关于android - 将android应用程序中布局的背景颜色与kotlin进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098765/

相关文章:

android - 线性布局 onclicklistener 不适用于 recyclerview

android - 创建圆形启动器图标

android - PhotoView(用于缩放)与 SwipeBack 不起作用

Android Studio 2.2 原生开发迁移问题

Android 支持工具栏无法正确显示自定义可绘制对象

android - 为 Android 开发 PhoneGap - 不同屏幕尺寸/像素密度的最佳实践

android - 如果我使用grifika的ContinuousCaptureActivity中的预览方式,相机预览的视野会变小

android - 如何在Android listview中实现分页

android - 如何让 Android 中的 TextView 具有水平滚动和自动滚动?

java - Kotlin 传递对象类作为参数初始化