Заменить предыдущее выбранное изображение на оригинальное, если нажать на новое изображение

1

Я использую grid view с ImageAdapter для отображения изображений. У меня есть два набора изображений: mThumbIds, содержащие исходные изображения и cThumbIds, содержащие выбранные изображения.

Прямо сейчас, когда я нажимаю на изображение, я меняю обычное изображение с выбранным изображением. Код выглядит следующим образом:

final ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
            iv.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    //iv.setColorFilter(Color.LTGRAY);
                    iv.setImageResource(cThumbIds[position]);
                    //iv.bringToFront();

                    index= position;

                }

            });

            iv.setImageResource(mThumbIds[position]);

Но проблема возникает, когда я нажимаю на другое изображение, другое изображение также отображается как выбрано. Правильный способ состоял бы в том, чтобы показать новое изображение как выбранное и удалить более старый, как выбранный. Иными словами, старший должен вернуться к исходному.

Пожалуйста, помогите мне в этом

Спасибо,

Панкай

Теги:
android-imageview

2 ответа

1
Лучший ответ

Я предполагаю, что вы используете модифицированную копию класса ImageAdapter в этом учебнике и что код, который вы опубликовали, находится в метод getView(int,View,ViewGroup) этого класса.

Вы сохраняете индекс выбранного изображения, но не сохраняете его. Вам нужно сохранить оба, чтобы вернуть прежнее изображение, примерно так:

private int selectedPosition = -1;
private ImageView selectedView = null;
...
public View getView(int position, View convertView, ViewGroup parent) {
    // I don't understand what this line is about??
    ImageView iv = (ImageView) v.findViewById(R.id.icon_image);
    // Why not something like this??
    // ImageView iv = new ImageView(mContext);

    iv.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // Set the selected image for the ImageView just pressed.
            iv.setImageResource(cThumbIds[position]);

            // Revert to the original image for the ImageView previously
            // pressed.
            if (selectedPosition != -1) {
                selectedView.setImageResource(mThumbIds[selectedPosition]);
            }

            // Save the position and ImageView just pressed so it can be
            // reverted next time an ImageView is pressed
            selectedPosition = position;
            selectedView = (ImageView) view;
        }
    });

    iv.setImageResource(mThumbIds[position]);
    return (iv);
}

Я немного запутался в строке ImageView iv = (ImageView) v.findViewById(R.id.icon_image);, хотя (как я упоминал в своем примере кода).

  • 0
    Привет, большое спасибо за ответ, используя приведенный выше код, который генерирует две ошибки: 1) Метод setImageResource (Integer) не определен для типа View (at selectedView.setImageResource) 2) представление не может быть преобразовано в переменную (at selectedView = view)
  • 0
    Первая ошибка связана с тем, что selectedView был просто View а не ImageView , я исправил это в коде (посмотрите мою историю редактирования, чтобы увидеть, что именно нужно изменить). Вторая ошибка не должна возникать, если вы точно скопировали этот код. view - это параметр в методе onClick .
Показать ещё 3 комментария
3

Вам нужно создать переменную и сохранить в ней идентификатор клика. Когда пользователь нажимает другое изображение, сначала reset другое изображение в соответствии с идентификатором в переменной, а затем заменяет значение переменной идентификатором текущего щелкнутого изображения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню