Android Studio 多按钮顺序触发交互功能的实现问题咨询
问题根因
- 逻辑嵌套错误:你将button3、button10的点击判断逻辑嵌套在了button1的判断分支中,只有点击button1时才会进入该分支,此时点击事件的view id必然是button1的id,永远无法匹配到button3、button10的处理逻辑
- 缺少状态标记:没有全局变量记录button1是否已经被点击,无法实现「先点击button1才可触发button3」的权限控制
完整实现方案
首先在你的Activity/Fragment类内添加成员变量和闪烁动画方法:
// 全局状态标记:记录button1是否已被点击 private boolean isButton1Clicked = false; // 构建按钮闪烁动画 private Animation getBlinkAnim() { AlphaAnimation blink = new AlphaAnimation(1.0f, 0.2f); blink.setDuration(400); // 单次闪烁时长,单位ms blink.setRepeatCount(4); // 重复闪烁次数,可自定义调整 blink.setRepeatMode(Animation.REVERSE); return blink; }
再修改onClick的逻辑,所有按钮的判断为平级关系:
public void onClick(View view){ int id = view.getId(); if (id == R.id.button1) { button1.setBackground(ContextCompat.getDrawable(this, R.drawable.design_btn_red_on)); isButton1Clicked = true; // 可选:如果需要视觉上标识button3变为可点击,可同时添加button3.setEnabled(true) } else if (id == R.id.button2) { button2.setBackground(ContextCompat.getDrawable(this, R.drawable.design_btn_green_on)); } else if (id == R.id.button3) { // 仅当button1已被点击时才触发效果 if (isButton1Clicked) { button3.startAnimation(getBlinkAnim()); } } else if (id == R.id.button10) { // 重置button3状态 button3.clearAnimation(); button3.setBackground(ContextCompat.getDrawable(this, R.drawable.design_btn_default_on)); } }
可选优化:如果需要在未点击button1时让button3呈现不可点击状态,可在布局XML中给button3添加
android:enabled="false"属性,在button1点击逻辑中加上button3.setEnabled(true)即可。
内容的提问来源于stack exchange,提问作者Yunju Kang
相关产品推荐
相关产品推荐

