Страницы

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

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

Перемещающаяся кнопка, как сделать OnClick?

Всем доброго времени суток!
Пусть есть любой View (для примера, кнопка), который должен постоянно двигаться и, в случае клика по нему, вызывать обработчик onclick. Я так полагаю, что если двигать кнопку, используя translate-анимацию, то кликнуть по ней можно будет только в том месте, откуда она начала движение, или в том, где прекратила движение.
Так не пойдет, нужно, чтоб в любом участке ее пути она была кликабельна там, где находится в конкретный момент. Можно заставить кнопку двигаться в цикле, изменяя ее X-, Y-координаты. Но тогда, я так полагаю, если зажать кнопку и подождать, пока она выйдет из под пальца в результате своей анимации, обработчик клика все равно сработает (или не сработает?). Нужно, чтоб он срабатывал только в случае, если палец был поднят от экрана в том же месте, где в это мгновение находится кнопка.
Как это реализовать, я не знаю, может, посоветуете пути решения?
В результате ответ, данный ниже, оказался правильным, вот реализация проверки, не ушла ли кнопка из-под пальца, если кому надо:
Я повесил на кнопку onTouchListener, и вот его код (isOff на входе =false):
case MotionEvent.ACTION_DOWN: firsttapX = motionEvent.getX();//берем Х и Y куда ткнули пальцем( по кнопке) firsttapY = motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: if (isOff==false) { dx = motionEvent.getX() - firsttapY;//получаем разницу между текущим dy = motionEvent.getY() - firsttapX;//положением кнопки и точкой куда мы if (abs(dx) > 50 || abs(dy) > 50) {//нажали isOf=true; /*тут то, что я хотел реализовать по клику мимо кнопки или если она свалила из-под пальца, это же продублировано в onClick мимо кнопки*/ } } break;
Если разница больше определенного числа (размер кнопки), то кнопка не под пальцем isOff=true перестает обрабатывать ACTION_MOVE.


Ответ

Если использовать ObjectAnimator, то кликнуть по ней можно будет и в момент движения. Но это только для API 11+

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

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