以下代码为每个点绘制一个颜色不同的图形(颜色选择在(...)中,这在这里是非常重要的。)
我将它附加到onTouchListener,它更改了包含变量x,y,z的Vector。一个“onTouch”更改点,然后使用updateView()更新视图。保持x的矢量的大小约为300个元素。保存y的数组大约为200.这使得每个onTouch事件的updateView()方法内部都有200 * 300个循环。
我尝试在触发下一个onTouch之前实现一个等待方法,但它仍然会变慢。
有什么想法吗?
public updateView(){
bitmap = Bitmap.createBitmap((int) width, height - nextToCurve.getHeight(),
Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
imageView.setImageBitmap(bitmap);
canvas.drawColor(Color.BLACK);
(...)
//x
for(int i5=start;i5<stop;i++){
//y
for(int i=blockSizeSmall-minBlockSize;i>minBlockSize;i--){
//change color for z
(...)
canvas.drawLine(oldX, oldY, temp3, temp4, paint);
canvas.drawPoint(x,y, paint);
}
imageView.postInvalidate();
}
答案 0 :(得分:1)
您的代码中似乎有三件事导致性能问题:
1)您的onTouch监听器只需一次触摸就会收到很多事件。小心过滤事件,只有可见的移动/触摸/触摸才能采取行动。 0.2像素的移动是典型的,会浪费大量时间。
2)在更新例程中创建位图会浪费大量时间。此外,当位图超出范围时,位图不会自动释放,因此您将很快耗尽内存。您需要明确地回收它们。在updateView方法之外创建(单个)位图并重新使用它。
3)由于您经常更新图像,因此将新位图设置为ImageView也可能是减速的原因。将位图设置为ImageView后,您可以更新位图,它将更新ImageView。