我在网上进行了研究,发现了关于比较图像和引用drawable文件夹中的图像的相关但不太相似的信息。
但是,通过遵循stackoverflow中的一个答案,我可以比较两个图像,并在单击按钮时在它们之间切换。
我只是担心我收到的不赞成使用的消息。
获取可绘制图像并进行比较的正确方式或语法是什么?看来getDrawable(int)不是那个位置的正确值。
这是我工作程序的代码和截图。

private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState() ==
                    MainActivity.this.getResources().getDrawable(R.drawable.corgi).getConstantState() ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }

划线getDrawable()方法的屏幕截图。
java - 不推荐使用getDrawable(int),它可能会产生NullPointerException-LMLPHP
java - 不推荐使用getDrawable(int),它可能会产生NullPointerException-LMLPHP
java - 不推荐使用getDrawable(int),它可能会产生NullPointerException-LMLPHP
虽然我的程序正在工作,但我希望确保以后避免不推荐的方法实例出现错误。
我认为这一点很重要,因为正如我之前提到的,我在谷歌上搜索到了不同的方法或语法信息。
下面是其他可能遇到相同问题的用户的修改解决方案。
 private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState().equals(
                    ContextCompat.getDrawable(MainActivity.this,R.drawable.corgi).getConstantState() ) ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }

最佳答案

getDrawable()在API级别22中被弃用。
使用ContextCompat进行以下访问:
https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getDrawable(android.content.Context,%20int)
用这种方法。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

如前所述。Android getResources().getDrawable() deprecated API 22

09-13 12:07