Я пишу приложение для Android, в котором одной из особенностей является то, что карта будет поворачиваться в соответствии с компасом (то есть, если телефон указывает на восток, карта будет ориентирована так, чтобы восточная сторона карты находилась сверху) , Предыдущие ответы, которые я нашел, предлагали написать метод onDraw () в mapView, однако API изменил метод на final, чтобы его нельзя было перезаписать. В результате я попытался переписать метод dispatchDraw()
следующим образом:
Примечание:
-компас - логическое значение, которое, если оно истинно, поворачивает представление
-подшипник - это переменная типа float с градусами поворота вида
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();
}