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