Java 在Android上优化画布绘制

Java 在Android上优化画布绘制,java,android,bitmap,android-canvas,Java,Android,Bitmap,Android Canvas,我不确定为什么我的代码(有点)滞后,并且不能以同样的速度可靠地运行——我想我一定是做错了什么,因为许多其他游戏都是完全流畅的。 我的Renderer类中的相关代码如下所示: public void drawPicString(Location location, String string, RenderParams params) { //canvas.save(); float rawX = location.getX(); float rawY =

我不确定为什么我的代码(有点)滞后,并且不能以同样的速度可靠地运行——我想我一定是做错了什么,因为许多其他游戏都是完全流畅的。 我的Renderer类中的相关代码如下所示:

public void drawPicString(Location location, String string,
        RenderParams params) {
    //canvas.save();
    float rawX = location.getX();
    float rawY = location.getY();
    Bitmap rawbit = myImageCache.get(string);
    //Bitmap rawbit = provider.getBitmap(string);
    float thisWidth = rawbit.getWidth();
    float thisHeight = rawbit.getHeight();
    if(params.shouldResize){
        thisWidth = params.resizex;
        thisHeight = params.resizey;
    }
    float leftx = rawX-(thisWidth/2);
    float topy = rawY-(thisHeight/2);
    Matrix matrix = new Matrix();
    matrix.setTranslate(leftx, topy);
    if(params.shouldResize){
        float toScaleY = ((float)thisHeight)/rawbit.getHeight();
        float toScaleX = ((float)thisWidth)/rawbit.getWidth();
        matrix.preScale(toScaleX, toScaleY);
        }
    if(params.shouldRotate){
        matrix.preRotate((float)Math.toDegrees(params.myangle),(float)(thisWidth/2.0),(float)(thisHeight/2.0));
    }
    canvas.drawBitmap(rawbit, matrix, paint);
}
我能想到的唯一其他相关信息是myImageCache是位图的缓存,因此它不必每次绘制位图时都从资源中获取它们。“canvas”是surfaceview上的画布绘图,在绘图开始之前,它会在每一帧传递给它


提前感谢您的任何想法

params.shouldResize或params.shouldRotate是否为真?如果是这样,您可能希望缓存矩阵,除非由于更改而需要重新计算。这取决于每个绘图。。不过,每一帧的旋转都不同,所以我认为缓存矩阵只会填满内存(加上每一帧每个对象的转换都不同)。请注意,大多数游戏使用OpenGL绘图,这比画布绘图快得多。正如DigitalGhost所说,重复使用一个声明的矩阵,因为每帧创建一个新矩阵都会触发GC,这会导致延迟。我会尝试从中去掉矩阵部分,看看这是否是性能瓶颈。我猜整个图像上的矩阵运算是导致速度减慢的原因