Как выборочно перерисовать представления на Android ScrollEvent? - PullRequest
1 голос
/ 08 марта 2012

У меня есть Layout, который как ImageView, ListView, некоторые TextViews и т. Д. Обернут в ScrollView.Всякий раз, когда пользователь прокручивает родительское представление, вызывает все методы draw () дочернего представления.Поскольку мой ImageView представляет собой сложное растровое изображение, созданное на лету, прокрутка действительно становится запаздывающей, потому что draw () моего imageview вызывается непрерывно, который переносится в ImageView.onDraw () и который в свою очередь делегирует мой сложный ConstructMyBitmap.draw () и перерисовываетрастровое изображение каждый раз.

Мне нужно подавить этот вызов imageView.onDraw () на scrollevent.Я не хочу перерисовывать мое сложное растровое изображение каждый раз, когда происходит прокрутка.

Как определить scrollevent внутри onDraw ()?

Или есть лучший способ справиться с этим?

To Romain Guy:

   protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if(chart != null && chart.shdRedraw())
            {
               chart.draw(canvas);
        }else
            {
              //Do nothing - Canvas should retain the old data
            }
        // :-) Happy, Now I control when the chart shd be drawn but.. :-(

    }

К сожалению, когда onDraw () вызывается событие onScroll, и я решаю не рисовать диаграмму, результатом является пустая область диаграммы.Холст, данный мне в onDraw (), не содержит ранее нарисованную информацию.Не знаете, очищает ли onDraw () холст?Любое руководство по этому поводу?

1 Ответ

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

Экран должен быть перерисован при прокрутке, поэтому единственный способ добиться того, чего вы хотите, - это кэшировать ваш View (используя свойство DrawingCacheEnabled в View.) Это, однако, требует больших затрат памяти.Почему бы вам просто не изменить свой код draw (), чтобы воссоздать дорогостоящее растровое изображение только после его изменения?

...