我希望一个图像淡出,另一个图像在点击时淡入,然后反过来

时间:2017-02-05 20:55:40

标签: java android if-statement animation

下面的代码应该淡化两个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));
}

1 个答案:

答案 0 :(得分:0)

你犯了一个逻辑错误,你的代码没有语法错误。 counter的范围是您遇到麻烦的地方。 counter是一个局部变量,它只存在于fade(...)方法中。每次致电fade()时,您都会重新counter并将其初始化为0。即使您在if语句中将其设置为1,也会在下次调用0时为fade()。您需要将其设为类变量或使用我在下面描述的交替方法。

非If声明交替方法:
您不需要if语句,只需获取pogbabale的alpha,然后在设置其alpha时使用1f - pogba.getAlpha()1f - bale.getAlpha()(使用任何方法返回其阿尔法)。使用此方法将在10之间交替。

因此,您的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