我正在开发一个应用程序,当用户触摸屏幕时,它会在图像中绘制一个圆圈,并且用户可以移动这个圆圈,将手指移到屏幕上。但是在移动的动作中,我可以看到很多滞后......
用户打开此图库的图像,之后,我所做的是:
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()。