Как добиться эффекта наклона на Android, как на Windows Phone?

Я хочу добиться эффекта наклона при нажатии кнопки на ОС Android.

Эффект наклона: не вся кнопка будет отображаться как нажатая. Должна быть нажата только та часть, которая имеет событие касания.

Возможно ли это на Android?

Введите описание изображения здесь

Solutions Collecting From Web of "Как добиться эффекта наклона на Android, как на Windows Phone?"

Простым способом было бы использовать рисование холста для рисования четырехсторонних фигур.

Рассмотрим каждый 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