У меня есть компас, который является подклассом класса представления, и моя стрелка компаса является растровым изображением. Каждый раз, когда датчик меняет компас, он становится недействительным и перерисовывается на холсте, вращение стрелки компаса также изменяется. У меня проблема в том, что когда вы видите, как вращается стрелка компаса, она немного отстает, в основном это плохие кадры в секунду. Я предполагаю, что это запаздывает, потому что я постоянно перерисовываю растровое изображение вместо того, чтобы рисовать, и задаюсь вопросом, исчезнут ли плохие кадры в секунду, если вместо рисования на холсте я использовал вид поверхности Будем весьма благодарны за любые советы о том, как решить эту проблему наилучшим образом. Изображение 300x300 пикселей.
Датчик в основной деятельности:
@Override
public void onSensorChanged(SensorEvent event) {
float[] v = event.values;
north = v[0];
comp.setNorth(-v[0]);
}
Вид компаса:
public void setNorth(float n) {
north_changed = true;
north = n;
invalidate();
}
Рисунок растрового изображения:
private void drawCompass(Canvas canvas) {
canvas.save();
if (north_changed == true) {
canvas.rotate(north);
}
float maxwidth = (float) (canvasBitmap.getWidth() * Math.sqrt(2));
float maxheight = (float) (canvasBitmap.getHeight() * Math.sqrt(2));
float ratio = Math.min(w / maxwidth, h / maxheight);
int width = (int) (canvasBitmap.getWidth() * ratio);
int height = (int) (canvasBitmap.getHeight() * ratio);
canvas.drawBitmap(compTexture, new Rect(0, 0, compTexture.getWidth(),
compTexture.getHeight()), new Rect(-width / 2, -height / 2,
width / 2, height / 2), facePaint);
canvas.restore();
}