Android Studio中Java判断控件背景色与目标色的if语句实现
在Android Java中实现背景色匹配判断的方案
当然可以实现你想要的逻辑!我来帮你拆解在Android Studio的Java环境里怎么完成这个颜色匹配加分的功能。
核心思路
你需要先获取用户点击控件的背景色int值,再和预先设定的目标颜色int值做直接比较,相等就加分。这里的关键是确保两者的颜色值类型统一(都用int类型的颜色常量),避免字符串或其他格式导致的匹配错误。
具体实现步骤
1. 确保颜色值统一为int类型
不管是生成控件背景色还是目标颜色,都用Android提供的Color类方法生成int类型的颜色值,比如:
// 直接使用系统颜色常量 int red = Color.RED; int green = Color.GREEN; int blue = Color.BLUE; // 或者自定义RGB颜色 int customRed = Color.rgb(255, 0, 0);
2. 获取点击控件的背景色
控件的背景可能是ColorDrawable(纯色背景)或其他Drawable类型,所以先判断类型再提取颜色值:
View clickedView = v; // v是点击事件中的控件对象 Drawable background = clickedView.getBackground(); int clickedColor = 0; // 仅处理纯色背景的情况(符合你的需求) if (background instanceof ColorDrawable) { clickedColor = ((ColorDrawable) background).getColor(); }
3. 实现匹配判断逻辑
把获取到的点击颜色和目标颜色对比,相等则加分:
int targetColor = ...; // 你预先随机生成的目标颜色 int point = 0; // 全局或类内的分数变量 if (clickedColor == targetColor) { point++; // 可选:给用户反馈,比如弹出Toast Toast.makeText(YourActivity.this, "答对啦!分数+1,当前:" + point, Toast.LENGTH_SHORT).show(); } // else分支不需要写代码,什么都不做即可
完整示例代码片段
这里给你一个包含点击事件、颜色生成、分数判断的完整示例:
public class MainActivity extends AppCompatActivity { private int point = 0; private int targetColor; private View[] controls; // 存储9个控件的数组 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化9个控件(根据你的布局ID修改) controls = new View[]{ findViewById(R.id.control1), findViewById(R.id.control2), findViewById(R.id.control3), findViewById(R.id.control4), findViewById(R.id.control5), findViewById(R.id.control6), findViewById(R.id.control7), findViewById(R.id.control8), findViewById(R.id.control9) }; // 给所有控件设置点击监听器 for (View control : controls) { control.setOnClickListener(controlClickListener); } // 初始化第一轮的目标颜色和控件背景 generateTargetColor(); resetControlBackgrounds(); } // 随机生成目标颜色 private void generateTargetColor() { Random random = new Random(); switch (random.nextInt(3)) { case 0: targetColor = Color.RED; // 更新UI提示用户目标颜色,比如TextView ((TextView) findViewById(R.id.tv_target)).setText("请点击红色控件"); break; case 1: targetColor = Color.GREEN; ((TextView) findViewById(R.id.tv_target)).setText("请点击绿色控件"); break; case 2: targetColor = Color.BLUE; ((TextView) findViewById(R.id.tv_target)).setText("请点击蓝色控件"); break; } } // 重置9个控件的背景色(随机红/绿/蓝) private void resetControlBackgrounds() { Random random = new Random(); for (View control : controls) { switch (random.nextInt(3)) { case 0: control.setBackgroundColor(Color.RED); break; case 1: control.setBackgroundColor(Color.GREEN); break; case 2: control.setBackgroundColor(Color.BLUE); break; } } } // 控件点击监听器 private final View.OnClickListener controlClickListener = new View.OnClickListener() { @Override public void onClick(View v) { Drawable background = v.getBackground(); if (background instanceof ColorDrawable) { int clickedColor = ((ColorDrawable) background).getColor(); if (clickedColor == targetColor) { point++; Toast.makeText(MainActivity.this, "加分!当前分数:" + point, Toast.LENGTH_SHORT).show(); // 进入下一轮 generateTargetColor(); resetControlBackgrounds(); } } } }; }
注意事项
- 不要用颜色字符串(比如
"#FF0000")来比较,因为即使视觉上是同一种颜色,不同的字符串格式可能导致匹配失败,统一用int类型颜色值更可靠。 - 如果你的最低兼容API低于21,
ColorDrawable.getColor()方法需要用兼容方式获取:((ColorDrawable) background).getColor()在API 21+可用,更低版本可以用background.getColor()(已过时,但仍可使用)。
内容的提问来源于stack exchange,提问作者Kamil Ciesielski
相关产品推荐
相关产品推荐

