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); } } });