为什么变量drawable和getDrawable(R.drawable.ic_launcher_background)分别引用不同的对象?

时间:2018-11-27 01:02:24

标签: java android

代码非常简单。 我想在单击按钮时更改FrameLayout的图像。

以下语句不起作用: if(framgLay.getForeground() == getDrawable(R.drawable.ic_launcher_background)

所以,我用下面的代码解决了这个问题。 但是,我不知道drawablegetDrawable(R.drawable.ic_launcher_background)分别引用不同对象的原因。

public class MainActivity extends AppCompatActivity {

FrameLayout fl1;
Drawable drawable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    fl1 = findViewById(R.id.fl1);
    drawable = getDrawable(R.drawable.ic_launcher_background);
    fl1.setForeground(drawable);

}

public void onClick(View v) {

    if (fl1.getForeground() == drawable) {
        fl1.setForeground(getDrawable(R.drawable.ic_arrow_drop_down_circle_black_24dp));
    } else {
        fl1.setForeground(drawable);
    }
}
}

1 个答案:

答案 0 :(得分:0)

原因是因为调用getDrawable(...)时它将创建包含相同图像的drawable的新实例,而==将比较这两个实例的引用。解决方法如下:

if (fl1.getForeground().pixelsEqualTo(drawable)) {
    // here equals
}