Как сделать части увеличиваемой картинки кликабельными

Я использую PhotoView для того чтобы можно было увеличивать/уменьшать картинку. На картинке есть части которые я хочу сделать кликабельными, но поскольку юзер может увеличивать/двигать увеличенную картинку, это кликабельная часть может перемещается в другую часть экрана. Есть ли какой-либо способ чтобы эта кликабельная часть выростала вместе с размером картинки и двигалась когда юзер двигает увеличенную картинку? К примеру:

Вначале юзер видит это, и хочет кликнуть на глаз

Вначале юзер видит это, и хочет кликнуть на глаз

глаз слишком маленький, и он увеличивает картинку, после чего кликает

глаз слишком маленький, и он увеличивает картинку, после чего кликает

Заранее спасибо!


Ответы (2 шт):

Автор решения: Спицко Дмитрий

Предложу отойти от идеи располагать еще одну View-шку, которая будет кликабельной. Лучше обрабатывать клик по самой PhotoView. В любой момент времени вы можете узнать текущее состояние зума. Если нет метода, возвращающего текущие ззначения, то точно можно подписаться на обновления состояния зума и сохранять их до того момента, когда оно понадобится. И порядок действий получается следующим

1) перехватываем клик по PhotoView. Сходу не могу придумать способа адекватнее, чем создать свой класс, наследованный от hotoView и переопределить onTouch 2) на основе состояния зума определяем пиксель, в который ткнул юзер 3) в проверяем попал ли юзер в некоторую разрешенную зону, которую можно задать уравнением окружности или тупо перечислением разрешенных пикселей

Можно немного поизвращаться сделать процесс код чуть проще, но неэффективнее. Если область очень клика сложная, то можно использовать маски. Одно изображение основное, а второе черно-белое, где черное - кликабельно, белое - нет, или наоборот. Создаем два PhotoView, одно на активити, второе не крепим ни к чему и передаем ему все настройки основного - размеры и состояние зума. При клике просто берем координаты "тыкнутого" пикселя на основном PhotoView и проверяем его цвет на дополнительном. Цветов у нас куча, так что можно закодировать кучу разных объектов на одной маске

→ Ссылка
Автор решения: Arthur

Разобрался. У PhotoView есть onPhotoTapListener в котором есть onPhotoTap, у которого параметры x и y в диапазоне от 0 до 1, как процент ширины и высоты drawable (независимости от ее масштаба). В итоге (к примеру) если юзер кликает в середину картинки, неважно увеличена она или нет, x и y будет 0.5 (так я задал кликабельную часть картинки)

→ Ссылка