在ImageView中获取可绘制的ID

chi*_*dev 49 android android-imageview android-drawable

我有一个ImageView并设置了一个drawable.现在我需要ImageView动态获取可点击事件的ID .我怎么才能得到它?

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

现在触摸事件imgtopcolor我想要绘制id因为我每次都设置不同的drawable并且想要将drawable与其他

Gre*_*lli 54

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

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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

对?所以这个功能getDrawableId()不存在.您无法获得drawable实例化的id,因为id只是对设备上数据位置的引用,如何构造drawable.一旦构造了drawable,它就无法获得用于创建它的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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 这就是我所说的.请阅读整个解决方案. (7认同)

Ano*_*age 31

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

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

在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);
Run Code Online (Sandbox Code Playgroud)

然后,如果您愿意,可以创建一个简单的函数来获取可绘制的id:

private int getDrawableId(ImageView iv) {
    return (Integer) iv.getTag();
}
Run Code Online (Sandbox Code Playgroud)

太容易了.


ral*_*abb 7

截至今天,此功能尚不支持。但是,我发现了这一点。

 imageView.setImageResource(R.drawable.ic_star_black_48dp);
 imageView.setTag(R.drawable.ic_star_black_48dp);
Run Code Online (Sandbox Code Playgroud)

因此,如果您想获取视图的ID,只需获取它的标签即可。

if (imageView.getTag() != null) {
   int resourceID = (int) imageView.getTag();

   //
   // drawable id.
   //   
}
Run Code Online (Sandbox Code Playgroud)