Выберите отдельные случайные изображения в Kotlin - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблема с кодом Kotlin, у меня есть задача, в которой я должен генерировать изображения случайным образом из массива, но дело в том, что они должны отличаться друг от друга. Существует четыре вида изображений, и после нажатия на них один из этих видов должен произвольно менять свой источник. Я написал этот код, но изображения не различимы

class MainActivity : AppCompatActivity(), View.OnClickListener {

    private val images = arrayOf(
        R.mipmap.fruit,
        R.mipmap.banana,
        R.mipmap.watermelon,
        R.mipmap.apricot,
        R.mipmap.cherry,
        R.mipmap.strawberry,
        R.mipmap.melon,
        R.mipmap.kiwi
    )
    private lateinit var imageViews:Array<ImageView>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        init()

    }

    private fun init() {

        imageViews = arrayOf(imageView_1, imageView_2, imageView_3, imageView_4)
        imageView_1.setOnClickListener(this)
        imageView_2.setOnClickListener(this)
        imageView_3.setOnClickListener(this)
        imageView_4.setOnClickListener(this)
    }


    override fun onClick(v: View?) {
        randomImageView().setImageResource(randomImage())
    }

    private fun randomImage() = images[(images.indices).random()]
    private fun randomImageView() = imageViews[(imageViews.indices).random()]

}

1 Ответ

0 голосов
/ 22 апреля 2020

Я бы сделал imageViews карту, которая также отслеживает, какие изображения установлены на видах. Затем вы можете выбрать случайные изображения из уменьшенного набора, удалив используемые изображения из пула выбора.

private val imageViews = MutableMap<ImageView, Int?>()

// in init ...
imageViews.putAll(listOf(imageView_1, imageView_2, imageView_3, imageView_4).map { it to null })

// ...

override fun onClick(v: View?) {
    val view = randomImageView()
    val image = randomImage()
    view.setImageResource(image)
    imageViews[view] = image
}

fun randomImage() = (images - imageViews.values).random()
...