2012-05-22 2 views
0

Я пытаюсь найти своеобразное элегантное решение для затухания в/из TextView, которое является частью элемента в ListView.Увядание вида в элементе ListView - с завихрением

Чтобы дать вам некоторый контекст, список показывает список игроков в баскетбольной игре. Пользователь вводит имя и получает диалог для регистрации события, например, выстрел или фол для этого игрока. После отклонения диалога пользователь возвращается к списку, и именно здесь я хотел бы предоставить некоторые отзывы о только что зарегистрированном событии.

Способ, которым я хотел бы сделать это, состоит в том, чтобы небольшая строка появлялась около 5 секунд при просмотре элемента (игрока), который только что был задействован. Маленькая строка будет отображать что-то вроде «3-го фола» или «4 оборота».

Наивная реализация проста. Измените текст представления на нужную строку, а затем запустите анимацию, которая исчезает в представлении, держит ее там некоторое время, а затем исчезает. Однако возникают проблемы, когда второе событие для того же игрока регистрируется вскоре после первого. В идеале первая строка обратной связи должна оставаться в течение 5 секунд, а вторая строка должна затухать в течение следующих 5 секунд.

Эта очередь анимации и текстовых изменений на основе каждого игрока. Я не совсем уверен, как реализовать. Более того, меня беспокоит взаимодействие между анимациями и жизненным циклом Деятельности. Что происходит (или должно произойти) в очереди анимации, когда активность отправляется на задний план, останавливается или даже удаляется из памяти? Или когда элемент удален из ArrayAdapter за списком?

Мысли?

Ману

ответ

1

Не беспокойтесь о жизненном цикле деятельности. Не будет никаких побочных эффектов. Однако, если действие переходит в фоновый режим во время анимации, анимация будет проходить, и вы ее не увидите.

Что касается имеющ одной анимации ждать следующего, просто сделать это:

// here we will keep track of any listView and when the last animation took place. 
// The keys will be your listView identifiers. Here I assumed an integer, but use whatever is a good ID for your listView 
private HashMap<Integer, Long> listViewLastAnimations; 

// the length of the animation in milliseconds 
private static long ANIMATION_LENGTH_MS = 5000; 

// put this code where you would start your animation 
// get when the last event animation occurred 
Long lastAnimation = listViewLastAnimations.get(YOUR_LIST_ITEM_IDENTIFIER); 
Date new = new Date(); 
if (lastAnimation == null || 
    new.currentTimeMillis() - lastAnimation > ANIMATION_LENGTH_MS){ 
listViewLastAnimations.put(YOUR_LIST_ITEM_IDENTIFIER, new.currentTimeMillis()); 
// perform animation as normal 
}else{ 
// set a delay to your animation with 
long delay = ANIMATION_LENGTH_MS - (new.currentTimeMillis() - lastAnimation); 
listViewLastAnimations.put(YOUR_LIST_ITEM_IDENTIFIER, new.currentTimeMillis() + delay); 
setStartOffset(delay) ; 
} 
+0

Спасибо Кайла за ваш ответ! Мне нравится его простота! Я надеюсь, что в ближайшие дни я буду реализовывать. Я дам Вам знать! – manu3d

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