Android: как сравнить ресурс изображения с R.drawable.imagename?

Я работаю над примером приложения, в котором мне нужно получить ресурс представления изображения в прослушивателе onClick и сравнить его с известным мне источником изображения. Если ресурсы совпадают, я хочу запустить другое намерение. Проблема, с которой я столкнулся прямо сейчас, заключается в том, чтобы получить доступ к этому ImageView (и, следовательно, к его целочисленному идентификатору ресурса) для сравнения с доступным ресурсом.

@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         
                }

person rizalp1    schedule 15.06.2011    source источник


Ответы (3)


Вы не можете получить выводимый идентификатор из ImageView. Но если вы установите его из кода, вы также можете сохранить его где-нибудь, например, в поле тега. Взгляните на аналогичный вопрос: Кто я сравниваю ресурс TextView фонового изображения с R.drawable.bg_image для переключателя.

person Michael    schedule 15.06.2011
comment
Если я не могу получить доступный для рисования ресурс, есть ли другой способ узнать, какой ImageView (вне сетки) щелкнул пользователь? Смогу ли я использовать позицию? и если да, то как? Спасибо за ответ. - person rizalp1; 16.06.2011
comment
Если речь идет о GridView, вы должны использовать GridView.setOnItemClickListener(). Вот руководство: developer.android.com/resources/tutorials/views/. - person Michael; 16.06.2011

Правильный способ - использовать 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. Например, я хотел изменить изображение при нажатии и закодировал его таким образом. Обратите внимание, как я также меняю тег, когда устанавливаю новый объект для рисования

        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);
                } 
            }
        });
person sandalone    schedule 25.04.2014

Вы можете использовать это.

  if((pic1.getDrawable().getConstantState() == getResources().getDrawable(R.drawable.addpics).getConstantState()))
    {
      //do something
    }
person Om kumar Yadav    schedule 13.06.2021