Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

ImageView перекрыть другим ImageView

Имеем
У меня в приложении должно быть много картинок(порядка 50-60), они размещаться по 10-15 штук в HorizontalScrollView->LinearLayout

//тут картинки

Туда их можно добавлять динамически(как сейчас я делаю):
LinearLayout layout = (LinearLayout) findViewById(R.id.ll); for (int i = 0; i < 50; i++) { ImageView imageView = new ImageView(this); imageView.setId(i); imageView.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.pic1)); layout.addView(imageView); }
Либо же картинки можно прописывать в разметке(не рациональный вариант)
Что нужно:
Сделать так, чтобы при нажатию на какую-либо картинку, поверх нее появился прозрачный градиент из drawable:

Когда пользователь нажмет на другую картинку - градиент с первой уберется и появится на другой картинке.
Проблема:
Не понимаю как обработать это все в OnClick. Как получить ImageView, чтобы задать ей градиент? Как потом отменить его для ImageView?
Прошу помочь в решение данной задачи. Заранее спасибо!


Ответ

Таки @pavlofff прав, это можно через selector сделать.
Создаём selector - файл my_selector.xml в res/drawable

Присваиваем его как изображение для ImageView
ImageView imageView = new ImageView(this); imageView.setId(i); imageView.setImageResource( R.drawable.my_selector ); layout.addView(imageView); Не забываем сделать родительский элемент кликабельным:


Ещё можно добавлять в разметку на ImageView, a FrameLayout c двумя ImageView внутри, один поверх другого. И им назначать разные картинки.
LinearLayout layout = (LinearLayout) findViewById(R.id.ll); for (int i = 0; i < 50; i++) { FrameLayout fr = new FrameLayout(this); fr.setClickable(true); layout.addView(fr);
ImageView imageView = new ImageView(this); imageView.setId(i); imageView.setImage(R.drawable.pic1); fr.addView(imageView); ImageView imageView = new ImageView(this); imageView.setId(i+1000); //устанавливаем по умолчанию пустую картинку imageView.setImageResource(null); fr.addView(imageView); }
Далее по нажатию на картинку ставим ей градиент
imageView.setImageResource(R.drawable.ГРАДИЕНТ);
И когда надо всё убрать - пробегаемся циклом по всем картинкам и ставим им пустые изображения
imageView.setImageResource(null);

Комментариев нет:

Отправить комментарий