Android:如何将图像资源与R.drawable.imagename进行比较?

我正在研究一个示例应用程序,我需要在onClick侦听器中获取图像视图的资源,并将其与我知道存在的图像源进行比较。 如果资源相同,我想启动另一个意图。 我现在面临的问题是访问ImageView(以及它的资源Id整数)以与可绘制资源进行比较。

@Override // should int be final ?? public View getView(final int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // This is not working and I need to find a way to solve this >> if (((ImageView)v).getResources().getInteger(0) == R.drawable.imageToCompare) { // do nothing } else { // do something } 

您无法从ImageView获取可绘制的ID。 但是如果你从代码中设置它,你也可以将它存储在某个地方,例如在标记字段中。 看一下类似的问题: 我将背景图像资源TextView与R.drawable.bg_image进行比较以进行切换 。

 if(((ImageView)v).getDrawable().getConstantState() == MainActivity.this .getResources().getDrawable(R.drawable.unlock) .getConstantState())) { // Do Something } 

正确的方法是用户setTag()getTag 。 我猜你正在制作自己的适配器。

在方法public View getView(int position, View convertView, ViewGroup parent) ,当您向其添加其他属性时,将标记设置为Imageview

 ImageView temp = (ImageView) v.findViewById(resId); temp.setImageResource(icon); temp.setTag(icon); //drawable unique ID will be my identifier here 

然后在onClick您只需将View v与您的drawable id进行比较。 例如,我想在点击时更改图像,我就是这样编码的。 注意我在设置新的drawable时如何更改标记

  img.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if ((Integer)v.getTag() == R.drawable.current_img) { v.setBackgroundResource(R.drawable.new_img); v.setTag(R.drawable.new_img); } } });