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