Пользовательский вид - избегайте перерисовки, когда не интерактивен - PullRequest
2 голосов
/ 04 мая 2010

У меня сложный нестандартный вид - фотоколлаж.

При каждом взаимодействии пользовательского интерфейса происходит перерисовка представления.

Как мне избежать полного перерисовывания (например, использования кэшированного пользовательского интерфейса) представления, особенно когда я нажимаю кнопку "назад", чтобы вернуться к предыдущему действию, поскольку это также вызывает перерисовку представления.

При изучении API и Интернета я нашел метод - getDrawingCache() - но не знаю, как его эффективно использовать.

Как мне эффективно его использовать?

У меня были другие проблемы с пользовательскими представлениями, которые я обрисовал здесь .

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Я нашел лучший способ, чем использовать getDrawingCache.

В методе onDraw, кроме рисования на натуральном холсте, я также рисую на холсте только для памяти.

Bitmap cacheBmp = Bitmap.Create(....);
Canvas cacheCanvas = new Canvas(cacheBmp);


void onDraw(Canvas c)
{
   if(updateDueToInteraction)
   {
     c.drawXXX(...);
     cacheCanvas.drawXXX(...);
   } else
   {
     c.drawBitmap(cacheBmp, 0, 0);
   }
}
0 голосов
/ 04 мая 2010

Прежде всего вам нужно будет использовать метод setDrawingCacheEnabled(true), чтобы ваш View был включен в кэш. Затем вы можете использовать метод getDrawingCache (boolean) , который возвращает Bitmap , представляющий представление. Затем вы можете нарисовать это растровое изображение вручную.

Если вы не включите кэширование, вызвав метод setDrawingCacheEnabled(true), вам придется вызывать buildDrawingCache() раньше (и вызывать destroyDrawingCache(), когда вы закончите).

Bye!

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