У меня есть пользовательский вид (ширина = 2000) внутри горизонтального прокрутки (ширина = 480). Итак, есть область, которую можно прокручивать.
Когда вызывается onDraw()
, грязный прямоугольник (возвращаемый getClipBounds()
) возвращает размеры всего вида, поэтому я рисую весь вид, включая невидимую область. Как следствие, когда я прокручиваю, onDraw()
больше не вызывается, потому что области, которые становятся видимыми, уже были нарисованы и как-то запоминались.
public void onDraw(Canvas canvas)
{
canvas.getClipBounds(r); // returns 2000 x 400
}
Это прекрасно работает!!!
Однако мое пользовательское представление может достигать 20 000 или более, и все начинает замедляться. Меня беспокоит то, что кэшированный рисунок использует много памяти. Я не думаю, что рисунок сохраняется как растровое изображение, потому что он уже разбился, так как же сохраняются эти команды рисования (в основном линии и текст)? Есть ли способ указать, что onDraw()
должен запрашивать только видимую часть представления, а при прокрутке он продолжает вызывать onDraw()
? Или есть какой-то другой подход?
Спасибо!