Я хочу добиться эффекта наклона при нажатии кнопки на ОС Android.
Эффект наклона: не вся кнопка будет считаться нажатой. Должна быть нажата только та часть, которая имеет событие касания.
Возможно ли это на Android?
Я хочу добиться эффекта наклона при нажатии кнопки на ОС Android.
Эффект наклона: не вся кнопка будет считаться нажатой. Должна быть нажата только та часть, которая имеет событие касания.
Возможно ли это на Android?
Простым способом было бы использовать рисование холста для рисования четырехсторонних фигур.
Рассмотрим каждый 4 угла. "Нетронутый" прямоугольник будет в полном размере, а коснутый прямоугольник будет меньше.
Вам просто нужно нарисовать свою четырехстороннюю форму, используя точку, которую вы вычисляете для каждой части прямоугольника. Вы можете получить позицию касания, а затем выяснить, сколько "веса" дать каждую точку.
чтобы рассчитать каждый угол, вам нужно выяснить, сколько "веса" дать коснутую координату и сколько "веса" дать нетронутую координату. Если вы коснетесь левого верхнего угла, этот угол будет использовать 100% касательной координаты, а остальные три угла будут использовать нетронутую координату.
Если вы коснулись верхней середины, вы получите такую форму:
Мы можем рассчитать углы для любого касания, вычислив, насколько далеко от угла ваше прикосновение
float untouchedXWeight1 = Math.abs(xt - x1)/width;
//maximum of 1, minimum of 0
float untouchedYWeight1 = Math.abs(yt - y1)/height;
float untouchedWeight1 = (untouchedXWeight1 + untouchedYWeight1)/2;
//also maximum of 1, minimum of 0
float touchedWeight1 = 1 - untouchedWeight1;
поэтому с этими весами вы можете рассчитать свои позиции x и y для этого угла:
x1 = xUntouched1 * untouchedWeight + xTouched1 * touchedWeight1;
y1 = yUntouched1 * untouchedWeight + yTouched1 * touchedWeight1;
Затем сделайте аналогично для остальных 3 углов.
Я создал первый черновик здесь: https://github.com/flavienlaurent/TiltEffect
На втором этапе я сделаю его пригодным для использования Button и т.д.
К несчастью, я не использовал очень хороший (но слишком математический для меня) ответ HalR