Математика снова встала на моем пути и победила меня. Мне нужна твоя помощь, чтобы перегруппироваться и снова атаковать.
Что у меня есть:
У меня есть поверхность и круг в виде растрового изображения. Мне нужно повернуть растровое изображение, когда пользователь перемещает палец по краю круга. Чем быстрее пользователь скользит, тем больше мне нужно повернуть изображение. Кажется простым, но не очень легко реализовать.
Что мне нужно
Мне нужно рассчитать угол, на который нужно повернуть изображение в событии onDraw. Из того, что я думал до сих пор, мне нужны две вещи: - угол между новой точкой касания и старой. Я сделал простую функцию, которая позаботится об этом:
private int getAngleBetweenTwoTouchedPoints(double oldX, double oldY, double newX, double newY)
{
return (int) Math.abs(Math.atan2(newY - oldY, newX - oldX));
}
угол, возвращаемый этим, варьируется от 0 до 1, и я считаю, что это правильно. Увеличивая угол матрицы поворота изображения на это значение, я получаю медленное вращение, в основном на 1 единицу. Так что шанс работать есть, но пока не ок. - так вот, второе, что мне может понадобиться, это скорость, с которой пользователь проводит пальцем по экрану. Итак, в основном что-то вроде этого:
вращениеAngle += уголBetweenTouches+скорость
Скорость, или скорость, как я ее назвал, является проблемой в моем случае, учитывая, что я двигаюсь не только по X или Y, а по кругу. Я понятия не имею, как его вычислить. Я видел помощь VelocityTracker на Android, но не знаю, как она может помочь.
Итак, резюмируем: мне нужно иметь возможность вращать изображение, когда пользователь перемещает палец вокруг границы изображения. Еще проще, когда пользователь прекращает скольжение, пиксель изображения, который был под пальцем в начале слайда, должен быть таким же, когда слайд останавливается.
Любая помощь приветствуется. Спасибо