0

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

用户打开这个画廊的图像,之后,我要做的是:

1)用户触摸屏幕

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

3)绘图:(+200ms)

-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 中测试我的应用程序,所以我在期待更好的结果...

4

1 回答 1

0

现在您在每一帧中分配图像,这可能会非常昂贵并且导致 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()。

于 2012-11-27T13:03:27.373 回答