- How to set OnClickListener for ImageView in Kotlin Android
- Code – ImageView OnClickListener
- Example – OnClickListener for ImageView
- Как я могу дать эффект щелчка imageview, как кнопка на Android?
- 29 ответов
- Как обработать нажатие ImageView
- Решение
- Урок 12. Практика. UsersAdapter. Обработка клика по элементу списка
- Создание SearchUsersActivity
- Создание UsersAdapter
- Обработка клика по элементу списка
- Создание наблюдателя за кликом в SearchUsersActivity
- Уведомление наблюдателя о событии в UsersAdapter
- Переход на экран UserInfoActivity
How to set OnClickListener for ImageView in Kotlin Android
In Android, ImageView is a child class of View, and hence the method setOnClickListener() could be used on the object of type ImageView.
When OnClickListener is set to ImageView, a click on the ImageView triggers the action and code inside setOnClickListener method is executed.
In this tutorial, we will learn how to set OnClickListener for ImageView in Kotlin file, with the help of an example.
Code – ImageView OnClickListener
Following is quick look into code to set OnClickListener for ImageView in Kotlin Android :
Example – OnClickListener for ImageView
In this example, we shall look into the layout xml file and Activity(Kotlin file) to set OnClickListener for a ImageView.
Create an Android Application with Kotlin Support and replace activity_main.xml and MainActivity.kt with the following content.
activity_main.xml
We have a ImageView in LinearLayout. We will use this ImageView to set on-click listener.
MainActivity.kt
Get reference to the the ImageView in layout file using id, and then call setOnClickListener <> on this ImageView. When user clicks on this ImageView, the code inside setOnClickListener <> will be executed.
Keep an image in the folder app/res/drawabale/ with name image1.png. This image has been given as the src (source) to ImageView in the activity_main.xml layout file.
Following are the screenshots to demonstrate the setOnClickListener for ImageView :
Источник
Как я могу дать эффект щелчка imageview, как кнопка на Android?
У меня есть imageview в моем Android-приложении, которое я использую как кнопку с событием onClick, но, как вы можете догадаться, он не дает imageview кликабельный эффект при нажатии. Как я могу этого достичь?
29 ответов
вы можете создавать различные изображения для состояний clicked / not clicked и устанавливать их в onTouchListener следующим образом
лучший выбор заключается в том, что вы определяете селектор следующим образом
и выберите изображение в случае:
вы можете сделать это с помощью одного изображения, используя что-то вроде этого:
Я, вероятно, сделаю это подклассом ImageView (или ImageButton, поскольку это также подкласс ImageView) для более легкого повторного использования, но это должно позволить вам применить «выбранный» вид к imageview.
Это можно сделать с только один файл изображения использование метода ColorFilter. Однако ColorFilter рассчитывает работать с ImageViews, а не с кнопками, поэтому вам нужно преобразовать кнопки в ImageViews. Это не проблема, если вы используете изображения в качестве кнопок, но это более раздражает, если у вас есть текст. В любом случае, если вы найдете способ обойти проблему с текстом, Вот код, чтобы использовать:
который применяет красный оверлей к кнопке ( цветовой код-это шестнадцатеричный код для полностью непрозрачного красного цвета-первые две цифры-прозрачность, затем это RR GG BB.).
редактировать: хотя оригинальный ответ ниже работает и легко настраивается, см. этот пост адвокатом разработчика Android в Google, если вы хотите / нуждаетесь в более эффективной реализации. Также обратите внимание, что android:foreground и приходя на все виды, включая ImageView, по умолчанию в Android M.
проблема с использованием селектора для ImageView заключается в том, что вы можете установить его только как вид фон-пока ваше изображение непрозрачно, вы не увидите эффект селектора за ним.
трюк заключается в том, чтобы обернуть ImageView в FrameLayout с атрибутом android:foreground что позволяет нам определить оверлея для его содержания. Если мы установим android:foreground селектору (например, ?android:attr/selectableItemBackground для уровня API 11+) и прикрепите OnClickListener к FrameLayout вместо ImageView, изображение будет перекрыто с drawable нашего селектора — the нажмите эффект мы желаем!
(обратите внимание, что это должно быть помещено в родительский макет.)
использовать style=»?android: borderlessButtonStyle» в XML-файле. Он покажет Android по умолчанию нажмите эффект.
Источник
Как обработать нажатие ImageView
Создаю программу на Андроиде. И сразу столкнулся с проблемой. Почему то не получается.
Создаю три объекта ImageView, и надо при нажатии на одну из картинок, чтобы она заменялась новой. Как это реализовать? Может кто подскажет?
Добавлено через 1 час 4 минуты
И вобще, такой код правильный?
Как обработать нажатие на ImageView?
Ребят, не пойму в чем ошибка, как обработать нажатие на картинку? public class MainActivity.
Как обработать нажатие на изображение в элементе listView?
Как все знают, listView делится на множество элементов, нажатия на них можно обработать. Но во.
Двойное нажатие на ImageView
Как реализовать метод двойного нажатия на ImageView ? Добавлено через 4 минуты p.s. По.
ImageView не работает нажатие
Создал ImageView в layout с названием vkontakte Создал Main2Activity В Манифесте прописал.
То есть как я понял:
ImageView imag = (ImageView) findViewById(R.id.imageView1);
imag.setClickable(true);
imag.setOnClickListener(this);
>
public void onClick(View v) <
switch (v.getId()) <
case R.id.imageView1:
ImageView imag = (ImageView) findViewById(R.id.imageView1);
imag.setClickable(true);
imag.setImageDrawable(getResources().getDrawable(R.drawable. ic_action_search));
break;
Красным выделил создание 2х объектов? Это имеешь ввиду?
А как же тогда использовать 1 объект?
в методе onClick не надо создавать еще раз объект imag?
Решение
Вложения
ImageView_apk.zip (156.8 Кб, 14 просмотров) |
Что тебе мешает разместить LinearLayout внутри RelativeLayout и в нем размещать свои ImageView?
Ты выложил апкашку, нужно выкладывать проект, чтобы можно было его весь посмотреть (думаю, об авторских правах тут речи нет?). Не видно твою разметку. Я так понимаю — игровое поле у тебя 3х3. Если ты решил использовать стандартные элементы вместо того чтобы рисовать наа канвасе, то само игровое поле (а у тебя могут быть еще и другие элементы интерфейса могло бы быть таким:
Изображения и параметры растягивания для ImageView укажи сам.
А вообще у тебя код очень длинный и много повторений. Я бы наверно в этом случае загнал бы элементы игрового поля в ArrayList и все проверки и назначения изображений и прикрепление слушателей производил бы циклически проходом по коллекции.
Как в ListView обработать нажатие кнопки и изменить здесь же значение в textView ?
У меня есть ListView, у него есть своя разметка на которой находится строчки на каждой из которых.
Как обработать нажатие кнопки «Назад», чтобы открывался рекламный баннер?
Требуется помощь. Начал осваивать это все недавно. Расскажу суть идеи: создав проект в Android.
Обработать нажатие на кнопки в уведомлении
Еще раз здравствуйте. Дело такое. Есть уведомление, в нем две кнопки. Они должны выполнять.
Не получается обработать нажатие на кнопку Home в ActionBar
в OnCreate прописал: ActionBar actionbar= getSupportActionBar(); .
Источник
Урок 12. Практика. UsersAdapter. Обработка клика по элементу списка
Код начала урока:
Создание SearchUsersActivity
Вначале нам надо создать новую Activity – SearchUsersActivity .
Мы ещё не создавали пакет activity . Давайте создадим его, как мы уже делали в прошлых уроках.
Давайте переместим файл UserInfoActivity в пакет activity . Для этого левой кнопкой нажимаем на UserInfoActivity и перетягиваем в пакет activity .
У вас появится диалог подтверждения перемещения файла, изменения его пакета во всех местах использования:
Нажимаем Refactor . Видим, что файл переместился. Двигаемся дальше.
Давайте в пакете activity создадим новый Java файл, который назовём SearchUsersActivity .
После этого давайте создадим layout для нашей Activity . Для этого нажмём правой кнопкой по папке layout и выберем New -> Layout resource file .
Введём имя activity_search_users , корневым элементом выберем контейнер FrameLayout . Сразу же добавим элемент RecyclerView в него:
Давайте свяжем наш layout и нашу Activity :
Также не забываем добавить нашу Activity в AndroidManifest файл:
Для тестирования давайте сделаем новую Activity SearchUsersActivity стартовой, чтобы мы могли видеть вносимые нами изменения на экране. Для этого в файле AndroidManifest перенесём блок в новую Activity :
Создание UsersAdapter
В предыдущем уроке мы познакомились с элементом RecyclerView и адаптером, при помощи которого можно отобразить элементы списка. В этом уроке предлагаем вам самостоятельно создать адаптер для списка экрана SearchUsersActivity . Наш вариант реализации приведён ниже.
Для тестирования вашего решения предлагаем создать метод getUsers() , возвращающий объекты-заглушки:
Напоминаем, что мы уже создавали файл user_item_view . Поэтому его и используем в нашем адаптере UsersAdapter .
Отличная работа. Самое время убедиться, что всё работает. Для этого добавим использование нашего адаптера в Activity . Также давайте добавим в нашу Activity методы
searchUsers() , getUsers() , чтобы отобразить в нашем списке тестовые элементы:
Запустим приложение, посмотрим на результат:
Отлично, идём дальше.
Обработка клика по элементу списка
Но на этом экране список немного отличается от предыдущего: здесь нам надо обработать нажатие на элемент списка и перейти на экран информации о пользователе.
Теперь о реализации. Механизм прост: физически на экране пользователь видит список из множества View -компонентов. Android обо всём позаботился до нас и всё, что необходимо сделать нам – это использовать готовый интерфейс-слушатель View.OnClickListener , который предоставляет единственный метод onClick(View v) . Использовать его довольно просто (помимо представленного здесь материала также можно ознакомиться с этим):
Таким образом, установив такой слушатель на View -компонент, мы можем реагировать на события нажатия на него любым необходимым нам способом. Отлично, момент, в который происходит нажатие на компонент, мы перехватываем.
Но теперь нам нужно получить данные пользователя, которые связаны, с этим компонентом. А мы, конечно же, помним, где осуществляется связь между View -компонентами и данными – в адаптере. Т.е. именно в адаптере мы можем узнать раньше всего, что произошло нажатие по какому-либо элементу и что необходимо связать его с реальными данными.
На этом зона ответственности адаптера заканчивается. За то, что делать с информацией, полученной при нажатии на элемент должна отвечать Activity . Поэтому нам необходим «мост», некий интерфейс адаптера, который бы помог нам реагировать на нажатия по элементу списка на более высоком уровне – оперируя данными.
Помните интерфейс, который предоставляет View ? С единственным методом, который сообщает нам, какой элемент был нажат. Нам нужен такой же, только сообщать он нам будет не о нажатом View , а о нажатом пользователе:
Отлично, теперь наш адаптер предоставляет интерфейс, который должен гарантировать вызов метода onUserClick(User user) при нажатии на элемент списка. Поэтому Activity смело может использовать его для реакции на данное событие.
Т.е. мы используем обычную реализацию паттерна проектирования наблюдатель.
Создание наблюдателя за кликом в SearchUsersActivity
В данном случае нам необходимо создать внутри SearchUsersActivity наблюдателя за кликом по элементу пользователя. Наблюдатель мы реализуем, создавая новый экземпляр интерфейса OnUserClickListener . Но для начала давайте добавим этот интерфейс в наш SearchUsersAdapter , чтобы мы могли передать слушателя из Activity в Adapter :
Пока по клику на элемент будем просто выводить имя пользователя, чтобы проверить, что всё работает правильно.
Уведомление наблюдателя о событии в UsersAdapter
Теперь осталось гарантировать, что метод onUserClick(User user) будет вызываться при каждом нажатии на элемент списка. Поэтому вызывать мы его будем в методе onClick(View v) , который срабатывает именно тогда, когда нам и нужно. Отличным местом для добавления слушателя для View -компонента является место его создания в адаптере:
Метод getLayoutPosition() вернёт нам позицию, по которой произошло нажатие, что поможет нам получить по порядковому номеру элемент данных. Эти данные мы и отправляем на уровень выше в методе onUserClick(User user) , с которыми уже работает Activity .
Давайте запустим приложение, проверим что при клике на элемент отображается корректное имя:
Видим, что снизу экрана вывелся Toast с именем Elon Musk . Отлично, значит всё работает корректно.
Переход на экран UserInfoActivity
Отличная работа. Но на этом экране список немного отличается от предыдущего: здесь по нажатию на элемент списка необходимо выполнить переход на детальную информацию о пользователе. Проще говоря, по нажатию на элемент списка нам необходимо узнать id пользователя, на которого мы нажали, и использовать его для перехода на детальную информацию о нём. Делать мы это будем при помощи объекта Intent (рус. намерение), при помощи которого мы сообщаем Android системе о том, что мы изъявляем желание попасть на другой экран и передать туда некоторые данные. Подробнее об этом механизме вы можете узнать из наших видеоуроков (этом и этом), а также из официальной документации.
Также давайте создадим константу USER_ID в Activity UserInfoActivity , чтобы мы могли ссылаться на неё при получении данных на экране:
Таким образом код перехода на экран детальной информации о пользователе выглядит следующим образом:
Мы могли бы просто передать просто «сырую» строку в объекте Intent :
Однако в таком случае при получении объекта Intent следующим экраном придётся снова писать данную строку. Это повышает шанс ошибки или опечатки при написании кода. Создание же константы USER_ID просто избавляет нас от необходимости задумываться о том, что скрывается внутри неё. Android Studio просто не позволит нам ошибиться.
Полный листинг кода:
Запустим приложение. Видим, что по клику на элемент списка мы переходим на UserInfoActivity .
Таким образом, в ходе данного урока мы рассмотрели принцип работы со слушателями существующих компонентов системы, а также научились создавать свои собственные.
После того, как вы закончите тестирование, не забудьте в манифесте приложения снова сделать Activity UserInfoActivity стартовой.
Источник