我正在尝试找到某种优雅的解决方案,用于淡入/淡出作为ListView中项目一部分的TextView。
为了给你一些背景信息,列表视图显示了篮球比赛中的球员名单。用户点击名称并提供用于记录事件的对话框,例如该玩家的击球或犯规。一旦对话框被解除,用户就会被带回列表视图,在这里,我想提供一些关于刚刚记录的事件的反馈。
我想这样做的方法是在刚刚点击的项目(播放器)视图中显示一个小字符串约5秒钟。小字符串会显示“第三次犯规”或“4次失误”。
天真的实施很简单。将视图的文本更改为所需的字符串,然后启动在视图中淡入淡出的动画,将其保留一段时间然后淡出。然而,当在第一个玩家之后不久记录同一玩家的第二个事件时出现问题。理想情况下,应允许第一个反馈字符串保持分配5秒,第二个字符串应在接下来的5秒内淡入/淡出。
动画和文本的排队在每个玩家的基础上更改我不太确定如何实现。此外,我关注动画和Activity的生命周期之间的相互作用。当活动被发送到后台,停止甚至从内存中删除时,排队动画会发生什么(或应该发生什么)?或者从列表视图后面的ArrayAdapter中删除项目时?
思想?
马努
答案 0 :(得分: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) ;
}