我正在做一个简单的记忆游戏。基本上,出现了一些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()
}
答案 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)
}
}
}