canvas.drawBitmap()在平铺位图时第一次绘制位图需要更多时间

时间:2011-10-08 06:56:58

标签: android canvas bitmap

我正在使用canvas.drawBitmap(Bitmap,src,dst,null)来制作动画。我正在使用1个平铺图像进行动画制作,每个平铺图像包含100多个用于制作动画的图像。我已经把onCLickListner放到了动画上。如何对onClick上的动画做出即时响应?

我根据以下链接使用了动画逻辑。 http://warriormill.com/2009/10/adroid-game-development-part-1-gameloop-sprites/

@Override
    public void draw(Canvas canvas) {
        try
        {
            FrameInfo frameinfo= animations.get(currentAnimation).sequence.get(currentFrame);
            Rect rclip = frameinfo.rect;
            Rect dest = new Rect(this.getXpos(), getYpos(), getXpos() + (rclip.right - rclip.left),
                getYpos() + (rclip.bottom - rclip.top));
            if(cf!=null)
            {
                //color filter code here

            }
            canvas.drawBitmap(tileSheet, rclip, dest, null);
            update(); //after drawing update the frame counter
        }
        catch (Exception e) 
        {
            Log.e("ERROR", "ERROR IN SPRITE TILE  CODE:"+e.toString()+e.getStackTrace().toString());
        }

    }

1 个答案:

答案 0 :(得分:1)

资源加载需要很长时间(它们在APK 中被压缩),以至于您必须预加载这些资源,而不是及时加载它们。 draw()方法是进行任何即时资源处理的最后一个方法。 您还应该在后台执行此操作,以避免ANR问题。 AsyncTask实施效果很好! 您还需要非常小心匹配DPI,否则drawBitmap()会缩放您的位图,这会显着降低您的帧速率。 如果您具备该技能,请使用带有2D纹理映射的OpenGL。