2010-01-20 4 views
0

Быстрого вопрос - я имею контроль, который простирающуюся LinearLayout и я переопределение этого OnPaint метод как этотAndroid рисунка - Фон кэширование

 
@Override 
protected void onDraw(Canvas canvas) { 

    super.dispatchDraw(canvas); 

    _background.draw(canvas); 
    _object1.draw(canvas); 
    _object2.draw(canvas); 
    _object3.draw(canvas); 

    // etc... 

} 

Каждые 40 мс Призывает postInvalidate() в фоновом режиме и OnPaint вызывается на Пользовательский интерфейс. Проблема заключается в том, что _background.draw занимает более 80% времени моего рисования.

Итак - возможно ли как-то кешировать фон, а не перерисовывать его каждый раз?

+0

Почему вы признаете недействительным каждые 40 мс? Объекты движутся по фону или сами объекты меняются, но остаются в одном и том же относительном положении? – RickNotFred

+0

Объекты движутся и меняются (движущаяся анимация) ... есть моменты, когда они стоят, но это особый случай (<10% времени) – kape123

ответ

1

Вы можете указать регион, в котором находится postInvalidate(), чтобы контролировать область, которая перерисовывается.

+0

Uf ... Я действительно ослеп, когда пропустил эту перегрузку. Я получаю это правильно: -Я могу разместить несколько областей для (Rect r: regions), и он будет рисовать только те части, независимо от того, обновляю ли я все в onDraw (попробовал это прямо сейчас, и кажется, что это работает так)? -Нет такой вещи, чтобы положить один LinearLayout поверх другого; поместите фоновое изображение на нижний, недействительный верх, который имеет прозрачный фон и увидит, что все это волшебство выработает (Android отменяет правильные области для меня)? – kape123

+0

Кроме того, еще одна вещь, если вы знаете. Предположим, у меня есть экран 320x480. Я вызываю canvas.drawBitmap с изображением 600x800. Будет ли это большее изображение рисовать в то же время, как если бы я обрезал его левую часть 320x480 (в Photoshop) перед компиляцией? Спасибо за помощь! – kape123

+1

На самом деле, я новичок в этом, но стараюсь как можно быстрее подойти к скорости. Я в основном отвечаю на основании того, что я читал. Вы можете поместить Drawables на несколько слоев и управлять ими с помощью LayerDrawable. Если бы это был я, я бы начал там. – RickNotFred

Смежные вопросы