У меня есть приложение компаса, в котором используется датчик ориентации, и каждый раз, когда датчик меняет мой взгляд компаса, он недействителен, чтобы вращаться к северу. Мой компас - растровое изображение 444px x 444px. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда датчик изменяется, и вы видите, что вращающийся компас отстает, в основном плохие fps. Вместо этого я попытался использовать поверхностное представление и изменить SENSOR_DELAY без каких-либо изменений. Хотел бы, чтобы кто-то помог мне выяснить ответ на эту проблему.Android View и датчики
Регистрация датчик
orientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sm.registerListener(this, orientation, SensorManager.SENSOR_DELAY_UI);
Всякий раз, когда датчик изменения
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (compass != null) {
float[] v = event.values;
north = v[0];
compass.setNorth(-north);
}
}
методы в представлении компаса
public void setNorth(float n) {
north_changed = true;
north = n;
invalidate();
}
private void drawBackground(Canvas canvas) {
canvas.save();
if (north_changed == true) {
canvas.rotate(north);
}
float maxwidth = (float) (backgroundTexture.getWidth() * Math.sqrt(2));
float maxheight = (float) (backgroundTexture.getHeight() * Math.sqrt(2));
float ratio = Math.min(w/maxwidth, h/maxheight);
int width = (int) (backgroundTexture.getWidth() * ratio);
int height = (int) (backgroundTexture.getHeight() * ratio);
canvas.drawBitmap(
backgroundTexture,
new Rect(0, 0, backgroundTexture.getWidth(), backgroundTexture
.getHeight()), new RectF(-width/1.5f, -height/1.5f,
width/1.5f, height/1.5f), facePaint);
canvas.restore();
}
OnDraw
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if (showCompass) {
w = getWidth();
h = getHeight();
cx = w/2;
cy = h/2;
canvas.translate(cx, cy);
loadImages();
drawBackground(canvas);
}
}
loadImages(); Загружаете ли вы изображения на каждый кадр чертежа? – Olsavage
Глупо мне, загружая изображения в конструкторе, исправил проблему. Благодарю. – user1163392