Поверните MapView в Android

Я пишу приложение для 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();
}
16
задан Nikhil 10 July 2012 в 09:40
поделиться

1 ответ

Это должно быть примерно так:

@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();
    }
}
1
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: