Pranciskus
Pranciskus

Reputation: 539

How to avoid randomizing image from array which is in image_view?

If I do this, it sometimes sets the same image as it was in image_view. For example, if R.drawable.cat__5_ is in image_view I want to select from R.drawable.cat__3_,R.drawable.cat__4_,R.drawable.cat__6_,R.drawable.cat__7_,R.drawable.cat__8_. How it can be done?

lateinit var random: Random
random = Random()
        var cats = intArrayOf(
                        R.drawable.cat__3_,
                        R.drawable.cat__4_,
                        R.drawable.cat__5_,
                        R.drawable.cat__6_,
                        R.drawable.cat__7_,
                        R.drawable.cat__8_)

            button.setOnClickListener{

            image_view.setImageResource(cats[random.nextInt(cats.size)])
    }

Upvotes: 1

Views: 116

Answers (1)

Raghul Vaikundam
Raghul Vaikundam

Reputation: 588

private var previousIndex = 0  // member variable to track the previous index
private val random by lazy { Random() }
private val cats = intArrayOf(
                        R.drawable.cat__3_,
                        R.drawable.cat__4_,
                        R.drawable.cat__5_,
                        R.drawable.cat__6_,
                        R.drawable.cat__7_,
                        R.drawable.cat__8_)

button.setOnClickListener{       
            image_view.setImageResource(cats[getNewRandomIndex()])
    }


private fun getNewRandomIndex(): Int {
    var newIndex = -1
    while(true) {
        newIndex = random.nextInt(cats.size)
        if(previousIndex != newIndex) {
            previousIndex = newIndex
            break
        }
    }
    return newIndex
}

The above function getNewRandomIndex() returns the index which is always different from the recent index. So you will get different image each time

Upvotes: 1

Related Questions