如何改进我的安卓应用程序?图像视图的大量滞后绘制



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

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

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)将结果位图设置为图像视图(+100ms)

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

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

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

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()。

最新更新