У меня есть компас, который является подклассом для класса представления, а моя стрелка компаса - растровое изображение. Каждый раз, когда датчик меняет компас, он недействителен и перерисовывается на полотне, также изменяется вращение стрелки компаса. Проблема, с которой я сталкиваюсь, заключается в том, что когда вы видите, что стрелка компаса вращается, она немного отстает, в основном плохая fps. Я предполагаю, что это отстает, потому что я постоянно перерисовываю растровое изображение вместо того, чтобы рисовать, и задаюсь вопросом, исчезнет ли бедный fps, если бы я использовал поверхностное представление вместо того, чтобы рисовать на холсте. Будем очень благодарны за любые советы о том, как решить эту проблему. Изображение 300x300 px.Android-графика
Датчик в основной деятельности:
@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();
}
Можете ли вы опубликовать, как вы рисуете растровое изображение? Вы не должны испытывать проблемы с производительностью, если вы просто рисуете повернутое изображение, особенно то, что составляет всего 300x300 пикселей. Использование SurfaceView НЕ приведет к исчезновению проблем с производительностью. – Samuel
Добавлен код. – user1163392
Какой тариф вы используете при регистрации с помощью SensorManager? Попробуйте SENSOR_DELAY_GAME или SENSOR_DELAY_FASTEST. Это может быть место, из-за которого происходит отставание. – Samuel