我在网上进行了研究,发现了关于比较图像和引用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()方法的屏幕截图。
虽然我的程序正在工作,但我希望确保以后避免不推荐的方法实例出现错误。
我认为这一点很重要,因为正如我之前提到的,我在谷歌上搜索到了不同的方法或语法信息。
下面是其他可能遇到相同问题的用户的修改解决方案。
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