我怎么能改进我的Android应用程序?很多滞后绘图到imageview

时间:2012-11-27 12:33:10

标签: android imageview android-canvas bitmapimage

我正在开发一个应用程序,当用户触摸屏幕时会在图像中绘制一个圆圈,并且用户也可以移动此圆圈在屏幕上移动手指。但在行动中,我可以看到很多滞后......

用户打开此图库的图像,之后,我所做的是:

1)用户触摸屏幕

2)计算屏幕点和图像点之间的对应关系(+ 100ms)

3)附图中:(+ 200毫秒)

-create a bitmap with the size of the original image

-create a canvas based on the previous bitmap

-canvas.drawimage, draw the original image

-canvas.drawcircle, draw the circle

4)将结果位图设置为imageview(+ 100ms)

每次用户移动手指时,我都会浪费400毫秒来完成所有这些过程......很长一段时间

我知道图像的分辨率非常重要,但我使用的是640x480图像...所以它不是一个非常大的图像...我正在测试我的应用程序在三星Galaxy s2中,所以我的表现更好......

1 个答案:

答案 0 :(得分:0)

现在你在每个帧中分配图像,这可能是非常昂贵的,并导致GC每5到10次绘制一次。对我来说,在ImageView中派生和覆盖绘图方法会好得多。通过这种方式,您可以在调用super.draw()之后通过绘制圆圈来节省大量的工作。像这样:

new ImageView(null){
    Paint paint = new Paint();
    int cx,cy,radius = 10;
    public void setPoint(int x,int y){
        cx = x;cy = y;
    }
    public void draw(android.graphics.Canvas canvas) {
        super.draw(canvas);
        canvas.drawCircle(cx, cy, radius, paint);
    };
}

设置图像(一次)和手指位置(触摸事件后)只需调用invalidate()。