在ImageView中获取drawable的ID

我有一个ImageView并设置一个可绘制的。 现在我需要dynamic获取ImageView点击事件的drawable ID。 我怎么才能得到它?

 imgtopcolor = (ImageView) findViewById(R.id.topcolor); imgtopcolor.setImageResource(R.drawable.dr); // How do I get this back? 

现在触摸imgtopcolor事件我想要drawable id,因为我设置不同的drawable每次都想要比较drawable与其他

我想如果我理解正确,这就是你在做什么。

 ImageView view = (ImageView) findViewById(R.id.someImage); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { ImageView imageView = (ImageView) view; assert(R.id.someImage == imageView.getId()); switch(getDrawableId(imageView)) { case R.drawable.foo: imageView.setDrawableResource(R.drawable.bar); break; case R.drawable.bar: default: imageView.setDrawableResource(R.drawable.foo); break; } }); 

对? 所以这个函数getDrawableId()不存在。 你不能得到一个可绘制实例化的id,因为id只是对设备上的数据位置的引用,如何构造一个可绘制的。 一旦构造了drawable,它就没有办法找回用来创build它的resourceId。 但是你可以使用标签来使其工作

 ImageView view = (ImageView) findViewById(R.id.someImage); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { ImageView imageView = (ImageView) view; assert(R.id.someImage == imageView.getId()); // See here Integer integer = (Integer) imageView.getTag(); integer = integer == null ? 0 : integer; switch(integer) { case R.drawable.foo: imageView.setDrawableResource(R.drawable.bar); imageView.setTag(R.drawable.bar); break; case R.drawable.bar: default: imageView.setDrawableResource(R.drawable.foo); imageView.setTag(R.drawable.foo); break; } }); 

我已经在另一个问题上回答了这个问题,但是对于这个问题,我会稍微改变一下。

不幸的是,没有getImageResource()getDrawableId() 。 但是,我使用ImageView标签创build了一个简单的解决方法。

在onCreate()中:

 imageView0 = (ImageView) findViewById(R.id.imageView0); imageView1 = (ImageView) findViewById(R.id.imageView1); imageView2 = (ImageView) findViewById(R.id.imageView2); imageView0.setTag(R.drawable.apple); imageView1.setTag(R.drawable.banana); imageView2.setTag(R.drawable.cereal); 

那么,如果你喜欢,你可以创build一个简单的函数来获取可绘制的id:

 private int getDrawableId(ImageView iv) { return (Integer) iv.getTag(); } 

太容易了。

截至今天,这个function还没有支持。 不过,我发现这个有点破解。

  imageView.setImageResource(R.drawable.ic_star_black_48dp); imageView.setTag(R.drawable.ic_star_black_48dp); 

所以,如果你想获得视图的ID,只需要它的标签。

 if (imageView.getTag() != null) { int resourceID = (int) imageView.getTag(); // // drawable id. // } 

一个简单的解决scheme可能是将drawable的id存储在一个临时variables中。 我不确定这对你的情况有多实用,但这绝对是一个快速的解决scheme。

更简单:只需在视图ID中存储R.drawable标识:use v.setId() 。 然后用v.getId()