Как установить «ImageView» быть кликабельным или не кликабельным - PullRequest
2 голосов
/ 26 июня 2019

Я делаю простую игру на память.В основном, появляется ImageView, и после этого пользователь должен нажать ImageView в соответствии с порядком.Однако, ImageView также может быть активным при сортировке.Итак, я хочу, чтобы ImageView не был кликабельным, пока сортировка не завершена, и тогда я хочу, чтобы ImageView можно было кликать по окончании сортировки.Как я могу это сделать?

-edit 1 После ваших решений я попробовал метод image.setEnable = false в kotlin, и у меня есть результат.

здесь соответствующий раздел kotlin

fun orderImages() {
    index=0
    Collections.shuffle(controlArray)
    println(controlArray)
    runnable = object : Runnable {
        override fun run() {
            for (image in imageArray) {
                image.visibility = View.INVISIBLE
                image.isEnabled = false
            }
            if (index < controlArray.size) {
                imageArray[controlArray[index]].visibility = View.VISIBLE
                index++
            } else {
                handler.removeCallbacks(runnable)
                for (image in imageArray) {
                    image.visibility = View.VISIBLE
                    image.isEnabled = true

                }
            }
            handler.postDelayed(runnable, 1000)
        }
    }
    handler.post(runnable)
    userArray.clear()
}

Ответы [ 4 ]

0 голосов
/ 26 июня 2019

Этот блок кода позволяет включать или отключать все представления в макете макета.

fun enableDisableViewGroup(viewGroup: ViewGroup, enabled: Boolean) {
            val childCount = viewGroup.childCount
            for (i in 0 until childCount) {
                val view = viewGroup.getChildAt(i) 
                    view.isEnabled = enabled 
                if (view is ViewGroup) {
                    enableDisableViewGroup(view, enabled)
                }
            }
        }
0 голосов
/ 26 июня 2019

Существует метод setClickable(boolean clickable), как вы можете видеть здесь: https://developer.android.com/reference/android/view/View.html#setClickable(boolean)

0 голосов
/ 26 июня 2019

Вы можете просто добавить setOnClickListener () к изображению и взять флаг, чтобы сделать его кликабельным или не кликабельным в зависимости от состояния флага.

private boolean isSorted = false;

где-то в вашем коде, где вы добавляете представление для списка изображений,используйте click listener-

holder.borrar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(isSorted) {
            //do what you want to do after it is sorted.
        }
    }
});

Таким образом, onClick сделает все, только если изображения отсортированы.Теперь где-то в вашем коде должно быть условие в вашем классе, чтобы состояние флага было изменено.Так что это было бы что-то вроде -

...
//Updating flag based on condition
if(condition) {
    isSorted = true;
}
...
0 голосов
/ 26 июня 2019

Чтобы программно отключить щелчок слушателя, используйте image.setEnabled(false);.Однако, как вы описали, я думаю, что ваша функция сортировки требует интенсивных вычислений, поэтому она требует времени и может блокировать поток пользовательского интерфейса, если время составляет несколько секунд.Для этого вы должны запустить функцию сортировки в новом потоке.Предполагая, что у вас есть кнопка buttonStartSorting в вашей деятельности.

final Handler handler = new Handler();
buttonStartSorting.setOnClickListener(new View.OnClickListener() {
    //disalbe listener for images
    for(imv in imageViews){
        imv.isEnable = false;
    }
    //do sort images on new thread
    Thread(Runnable {
        yourSortImagesMethod(imageViews);
        handler.post(Runable{
          //enable listener for images
          for(imv in imageViews){
             imv.isEnable = true;
          }
        })
    }).start()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...