下面的代码应该淡化两个ImageViews
,一个需要淡入而另一个需要淡出,具体取决于counter
的值。出于某种原因,当我运行代码时,我得到以下日志输出:
I/Info: One
I/Info Counter:: 1
I/Info: One
I/Info Counter:: 1
...
它从未显示:
I/Info: Two
I/Info Counter:: 0
有人可以解释为什么会这样吗?
以下是代码:
public void fade(View view) {
int counter = 0;
ImageView bale = (ImageView) findViewById(R.id.bale);
ImageView pogba = (ImageView) findViewById(R.id.pogba);
if (counter == 0) {
bale.animate().alpha(0f).setDuration(2000);
pogba.animate().alpha(1f).setDuration(2000);
Log.i("Info", "One");
counter = 1;
} else if (counter == 1){
pogba.animate().alpha(1f).setDuration(2000);
bale.animate().alpha(0f).setDuration(2000);
Log.i("Info", "Two");
counter = 0;
}
Log.i("Info Counter: ", String.valueOf(counter));
}
答案 0 :(得分:0)
你犯了一个逻辑错误,你的代码没有语法错误。 counter
的范围是您遇到麻烦的地方。 counter
是一个局部变量,它只存在于fade(...)
方法中。每次致电fade()
时,您都会重新counter
并将其初始化为0
。即使您在if语句中将其设置为1
,也会在下次调用0
时为fade()
。您需要将其设为类变量或使用我在下面描述的交替方法。
非If声明交替方法:
您不需要if语句,只需获取pogba
和bale
的alpha,然后在设置其alpha时使用1f - pogba.getAlpha()
和1f - bale.getAlpha()
(使用任何方法返回其阿尔法)。使用此方法将在1
和0
之间交替。
因此,您的fade(View view)
方法与以下内容类似:
public void fade(View view) {
ImageView bale = (ImageView) findViewById(R.id.bale);
ImageView pogba = (ImageView) findViewById(R.id.pogba);
// I'm not familiar with the method to get the alpha
// so it might not be getAlpha()
bale.animate().alpha(1f - bale.getAlpha()).setDuration(2000);
pogba.animate().alpha(1f - pogba.getAlpha()).setDuration(2000);
}
您当然需要在代码中的其他位置执行以下操作,可能是构造函数。
bale.setAlpha(1f); // I'm not familiar with the method to set the alpha
pogba.setAlpha(0f); // it might be setAlpha(), but I'm not sure