Search code examples
androidandroid-imageviewandroid-drawable

Get the ID of a drawable in ImageView


I have one ImageView and set a drawable on it. Now I need to get the ID of the drawable on click event of ImageView dynamically. How can I get it?

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

Now on touch event of imgtopcolor i want to need drawable id because I am setting different drawable each time and want to compare the drawable with other


Solution

  • I think if I understand correctly this is what you are doing.

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

    Right? So that function getDrawableId() doesn't exist. You can't get a the id that a drawable was instantiated from because the id is just a reference to the location of data on the device on how to construct a drawable. Once the drawable is constructed it doesn't have a way to get back the resourceId that was used to create it. But you could make it work something like this using tags

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