Всем доброго времени суток!
Пусть есть любой 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+
Комментариев нет:
Отправить комментарий