Я пишу приложение для Android, в котором одна из функций заключается в том, что карта будет вращаться в соответствии с компасом (т.е. если телефон указывает на восток, карта будет ориентирована так, чтобы восточная сторона карты была сверху), Предыдущие ответы, которые, как я нашел, были предложены для написания метода onDraw() в mapView, однако api изменил метод на final, чтобы его нельзя было перезаписать. В результате я попытался перезаписать метод dispatchDraw()
следующим образом:
Примечание:
-compass является логическим, если true, поверните представление
-bearing - это переменная с плавающей точкой, которая имеет градусы, которые вид должен вращать.
protected void dispatchDraw(Canvas canvas) {
canvas.save();
if (compass) {
final float w = this.getWidth();
final float h = this.getHeight();
final float scaleFactor = (float)(Math.sqrt(h * h + w * w) / Math.min(w, h));
final float centerX = w / 2.0f;
final float centerY = h / 2.0f;
canvas.rotate(bearing, centerX, centerY);
canvas.scale(scaleFactor, scaleFactor, centerX, centerY);
}
super.dispatchDraw(canvas);
canvas.restore();
}