Android开发:点击切换图片时Integer变量无法自增求助
问题分析与解决方案
嘿,我一眼就揪出问题所在啦!你看,在每次点击触发的bbd方法里,第一行就写了i = 1;——这意味着每次点击按钮时,变量i都会被强制重置为1,不管之前它的值是多少。
咱们捋一遍实际执行流程就懂了:
- 第一次点击:
i被设为1,进入if (i == 1)块,i自增到2,执行第一个动画逻辑。但方法执行完后,这个i的变化确实生效了,可下次点击时,又会被重新赋值为1。 - 后续所有点击:
i永远从1开始,永远只会进入第一个if分支,你在日志里看到的i值是赋值后的1,自然会觉得“自增没起作用”。
修复方案
把i的初始化移到onCreate方法里,只在页面创建时初始化一次,而不是每次点击都重置:
public class MainActivity extends AppCompatActivity { public int i; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 仅在页面初始化时设置i的初始值 i = 1; } public void bbd(View view) { Log.d(" value of i is ", String.valueOf(i)); if (i == 1) { i++; ImageView img2 = (ImageView) findViewById((R.id.cc)); img2.animate().alpha(0f).setDuration(2000); ImageView img = (ImageView) findViewById(R.id.bb); img.animate().alpha(1f).setDuration(2000); } else if (i == 2) { ImageView img = (ImageView) findViewById(R.id.bb); ImageView img2 = (ImageView) findViewById((R.id.cc)); img.animate().alpha(0f).setDuration(2000); img2.animate().alpha(1f).setDuration(2000); i--; } } }
额外优化建议
其实用整数来控制状态容易出现边界错误,你可以考虑用布尔变量让逻辑更清晰直观:
public class MainActivity extends AppCompatActivity { // 用布尔变量标记当前显示的是哪张图 private boolean isFirstImageVisible = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void bbd(View view) { ImageView img = findViewById(R.id.bb); ImageView img2 = findViewById(R.id.cc); if (isFirstImageVisible) { img2.animate().alpha(0f).setDuration(2000); img.animate().alpha(1f).setDuration(2000); } else { img.animate().alpha(0f).setDuration(2000); img2.animate().alpha(1f).setDuration(2000); } // 点击后直接切换状态 isFirstImageVisible = !isFirstImageVisible; } }
这样代码更简洁,也不用再担心整数状态的混乱问题~
内容的提问来源于stack exchange,提问作者vaibnak
相关产品推荐
相关产品推荐

