У меня есть приложение карты, использующее встроенный движок карты на Android. Я работаю над поворотным видом карты, который вращает карту, основанную на ориентации телефона, используя Sensor Service. Все работает отлично, за исключением перетаскивания карты, когда телефон указывает не на север. Например, если телефон стоит перед Западом, перетаскивание карты по-прежнему перемещает карту на юг и восток, как и следовало ожидать. Я предполагаю, что перевод холста - одно из возможных решений, но я честно не уверен, как правильно это сделать.Вращение ударов по холсту TouchEvents
Вот код, я использую, чтобы повернуть холст:
public void dispatchDraw(Canvas canvas)
{
canvas.save(Canvas.MATRIX_SAVE_FLAG);
// mHeading is the orientation from the Sensor
canvas.rotate(-mHeading, origin[X],origin[Y]);
mCanvas.delegate = canvas;
super.dispatchDraw(mCanvas);
canvas.restore();
}
Каков наилучший подход, чтобы перетаскивать карту последовательно, независимо от ориентации телефонов? Сенсормангер имеет метод «remapcoordinates()», но неясно, что это решит мою проблему.
Это сделало трюк! Спасибо, Рувим! Что может быть тривиально для тебя, у меня было немного тупое. Я подумал о том, чтобы компенсировать MotionEvent, но не был уверен, как это повлияет на остальную часть моего приложения. Стоит +50. Для тех, кто может попробовать одно и то же, просто измените MotionEvent следующим образом: event.setLocation (delta.x, delta.y) – dbryson
Не беспокойтесь. Рад, что вы исправили его для инверсии оси Y, которую я случайно оставил там. Этот фрагмент кода появился из моей библиотеки GL, и все мои проекции GL имеют положительный Y, а не вниз, как в Canvas API. –