Android 安卓图形

Android 安卓图形,android,graphic,Android,Graphic,我有一个指南针,它是view类的一个子类,我的指南针是位图。每次传感器改变指南针时,指南针就会失效并在画布上重新绘制,指南针的旋转也会改变。我遇到的问题是,当你看到指南针旋转时,它有点滞后,基本上fps很差。我猜它是滞后的,因为我一直在重新绘制位图而不是实际绘制,并且想知道如果我使用曲面视图而不是在画布上绘制,那么糟糕的fps是否会消失。任何关于如何以最佳方式解决此问题的提示都将不胜感激。图像为300x300像素 主要活动中的传感器: @Override public void onSensor

我有一个指南针,它是view类的一个子类,我的指南针是位图。每次传感器改变指南针时,指南针就会失效并在画布上重新绘制,指南针的旋转也会改变。我遇到的问题是,当你看到指南针旋转时,它有点滞后,基本上fps很差。我猜它是滞后的,因为我一直在重新绘制位图而不是实际绘制,并且想知道如果我使用曲面视图而不是在画布上绘制,那么糟糕的fps是否会消失。任何关于如何以最佳方式解决此问题的提示都将不胜感激。图像为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();

}

使用
SurfaceView
更适合此任务,它可以每秒渲染更多帧,您还可以使用
GLSurfaceView
确保所有内容都在GPU上渲染。

您可以发布位图的绘制方式吗?如果只是绘制一个旋转图像,尤其是一个只有300x300像素的图像,就不应该遇到性能问题。使用SurfaceView不仅可以消除您的性能问题。在向SensorManager注册时,您使用的费率是多少?尝试传感器延迟游戏或传感器延迟最快。这可能就是延迟的原因。没有帮助改变速率,仍然是相同的延迟。SurfaceView没有修复延迟,就像我使用简单视图时一样。