Я пишу приложение для Android, где одна из функций - то, что карта будет вращаться согласно компасу (т.е. если телефон укажет на восток, то карта будет ориентирована так, чтобы восточная сторона карты была на вершине). Предыдущие ответы, которые я нашел предложенными по записи onDraw () метод в mapView, однако, API, изменили метод на финал, таким образом, это не может быть перезаписано. В результате я попытался перезаписать dispatchDraw()
метод как так:
Примечание:
- компас является булевской переменной, что если это правда, поверните представление
- перенос является переменной плавающей, которая имеет градусы, которые должно повернуть представление
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();
}
Это должно быть примерно так:
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
if (compass) {
// rotate the canvas with the pivot on the center of the screen
canvas.rotate(-azimuth, getWidth() * 0.5f, getHeight() * 0.5f);
super.dispatchDraw(canvas);
canvas.restore();
}
}