Android ImageView медленный, есть ли простой способ ускорить его? - PullRequest
1 голос
/ 29 февраля 2012

Следующий код рисует график с разными цветами для каждой точки (выбор цвета находится в (...), который здесь не важен).
Я прикрепил это к onTouchListener, который изменяет Вектор, который содержит переменные x, у, г.Один «onTouch» меняет точки, а затем обновляет вид с помощью updateView ().Размер вектора, который содержит х, составляет около 300 элементов.Массив, содержащий y, составляет около 200. Это делает его равным 200 * 300 циклам внутри метода updateView () для каждого события onTouch.Я пытался реализовать метод ожидания до того, как будет запущен следующий метод 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 Ответ

1 голос
/ 06 марта 2012

Кажется, что в вашем коде есть 3 вещи, вызывающие проблемы с производительностью:

1) Ваш слушатель onTouch получает много событий за одно касание.Будьте внимательны, чтобы отфильтровать события так, чтобы действовали только видимые движения / касания / неприкосновения.Движения на 0,2 пикселя являются типичными и будут тратить много времени.

2) Создание растрового изображения в вашей процедуре обновления будет тратить много времени.Кроме того, растровые изображения не освобождаются автоматически, когда они выходят за пределы области видимости, поэтому вам быстро не хватит памяти.Вы должны явно утилизировать их.Создайте (одиночное) растровое изображение вне вашего метода updateView и используйте его повторно.

3) Установка нового растрового изображения в ImageView также может стать причиной замедления, поскольку вы часто обновляете изображение.После установки растрового изображения в ImageView вы можете обновить растровое изображение, и оно обновит ImageView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...