Android ImageView速度慢,有没有简单的方法加快速度?

时间:2012-02-29 09:44:02

标签: android performance imageview

以下代码为每个点绘制一个颜色不同的图形(颜色选择在(...)中,这在这里是非常重要的。)
我将它附加到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(); 
}

1 个答案:

答案 0 :(得分:1)

您的代码中似乎有三件事导致性能问题:

1)您的onTouch监听器只需一次触摸就会收到很多事件。小心过滤事件,只有可见的移动/触摸/触摸才能采取行动。 0.2像素的移动是典型的,会浪费大量时间。

2)在更新例程中创建位图会浪费大量时间。此外,当位图超出范围时,位图不会自动释放,因此您将很快耗尽内存。您需要明确地回收它们。在updateView方法之外创建(单个)位图并重新使用它。

3)由于您经常更新图像,因此将新位图设置为ImageView也可能是减速的原因。将位图设置为ImageView后,您可以更新位图,它将更新ImageView。