Simon Says按钮点击后颜色无法恢复正常的技术问题咨询
解决Simon Says应用按钮点击后颜色无法恢复的问题
嘿,这个问题我之前做类似记忆游戏时也碰到过!看了你贴的代码,一眼就发现问题所在了:你只实现了按钮变成激活色的逻辑,完全没写恢复默认颜色的步骤,所以按钮亮起来之后就一直停在激活状态啦。
问题根源分析
你当前的代码里,Runnable只负责把ImageView切换到激活状态的图片,但执行完这个操作后就没有后续动作了,自然不会自动恢复到默认的按钮颜色。
修复方案
我们需要给按钮加一个“延迟恢复”的逻辑:先切换到激活色,等一小段时间(比如500毫秒,这个时长可以根据游戏节奏调整),再切换回默认颜色。用Handler.postDelayed()就能轻松实现这个延迟操作,而且代码更简洁。
修改后的完整代码如下:
public void flashButton(int color) { final ImageView colors = findViewById(R.id.buttonsImage); // 第一步:设置按钮为激活状态的颜色 switch(color) { case 1: colors.setImageResource(R.drawable.green_activated_png); break; case 2: colors.setImageResource(R.drawable.yellow_activated_png); break; case 3: colors.setImageResource(R.drawable.red_activated_png); break; case 4: colors.setImageResource(R.drawable.blue_activated_png); break; default: // 非法颜色值直接返回,避免出错 return; } // 第二步:延迟指定时间后,恢复按钮的默认颜色 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { switch(color) { case 1: colors.setImageResource(R.drawable.green_default_png); // 替换成你的绿色默认图片资源 break; case 2: colors.setImageResource(R.drawable.yellow_default_png); // 替换成你的黄色默认图片资源 break; case 3: colors.setImageResource(R.drawable.red_default_png); // 替换成你的红色默认图片资源 break; case 4: colors.setImageResource(R.drawable.blue_default_png); // 替换成你的蓝色默认图片资源 break; } } }, 500); // 这里的500是延迟时长,单位为毫秒,可根据游戏体验调整 }
额外注意事项
- 一定要把代码里的
green_default_png等替换成你项目中实际存在的默认状态图片文件名,不然会报资源找不到的错误。 - 如果你的
flashButton方法是在非主线程调用的,Handler必须传入Looper.getMainLooper(),因为所有UI操作都必须在主线程执行,否则会抛出异常。 - 建议把延迟时长定义成一个常量(比如
private static final int FLASH_DURATION = 500;),这样后续调整游戏节奏时只需要改一个地方就行。
内容的提问来源于stack exchange,提问作者m.rights
相关产品推荐
相关产品推荐

