如何将“ ImageView”设置为可点击还是不可点击

时间:2019-06-26 10:18:23

标签: android kotlin

我正在做一个简单的记忆游戏。基本上,出现了一些ImageView,之后该用户应按顺序单击ImageView。但是,ImageView在排序时也可以单击。 因此,我希望ImageView在排序未完成时不可点击,然后我希望ImageView在排序完成后可点击。我该怎么办?

-编辑1 在您解决方案之后,我在Kotlin中尝试了image.setEnable = false方法,并且得到了结果。

此处为相关部分 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 :(得分:1)

您可以简单地在imageview上添加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;
}
...

答案 1 :(得分:0)

要以编程方式禁用点击侦听器,请使用image.setEnabled(false);。但是,正如您所描述的,我认为您的排序功能是密集型计算,因此需要花费时间,并且如果时间是几秒钟,它可能会阻塞UI线程。因此,您必须在新线程上运行排序功能。假设您在活动中有一个按钮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()
})

答案 2 :(得分:0)

实际上有一个setClickable(boolean clickable)方法,您可以在这里看到:https://developer.android.com/reference/android/view/View.html#setClickable(boolean)

答案 3 :(得分:0)

此代码块使您可以启用或禁用布局布局中的所有视图。

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