Android-如何定期将列表项的背景颜色从透明切换为红色?
我有一个listview,我想通过每5秒将每个listitem的背景颜色从透明切换到红色来操纵它。这是自定义Android-如何定期将列表项的背景颜色从透明切换为红色?,android,android-listview,android-animation,Android,Android Listview,Android Animation,我有一个listview,我想通过每5秒将每个listitem的背景颜色从透明切换到红色来操纵它。这是自定义BaseAdapter中我的getView方法的代码: @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null){ viewHolder = ne
BaseAdapter
中我的getView方法的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
// store my view in view holder here
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder)convertView.getTag();
}
// How do I manipulate this so that the background colour toggles
// between TRANSPARENT and RED every 5 seconds ?
convertView.setBackgroundColor(Color.RED);
return convertView;
}
我想做的是使用提供定期执行的计时器切换每个列表元素的背景色。但这究竟需要如何实施?或者,是否有一种更为理想的方式来实现同样的结果 来自:
您可以在列表视图中为创建的每一行启动此倒计时程序 您可以创建一个背景线程
(当有大量列表项时,可以调用主UI线程
阻塞),在其中创建一个周期计时器
,一旦一个周期结束,您可以查看所有列表视图
项目并更改背景颜色:列表视图.getChildAt(位置).setBackgroundColor(颜色)代码>
下面是一个例子:
CountDownTimer remainingTimeCounter = new CountDownTimer(futureInMillis, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
// TODO: restart counter
futureInMillis = newTime(); // set the same futureInMillis to make it periodic
this.start();
listView.getChildAt(i).setBackgroundColor(color);
}
}.start();
谢谢你。如果我的理解是正确的,我还必须在listitem消失时取消计时器(Android ListView中的循环现象)。我也想知道实现这一点的最佳方法。@user1841702我自己没有测试过,但这是我最初想到的如何解决您的问题。我会尝试一下,看看会发生什么。@user1841702实际上,我认为这仍然有效。当应用程序重新使用这些行时,将初始化一个新的倒计时程序。@Der Golem-是的,你是对的,该功能本身可能非常烦人,但我正在尝试使用适用于列表项的计时器。这只是一个实验。我想用定时器,但是我想知道当一个项目被回收或看不见时如何取消计时器。因为我很忙,我想说的只是最简单的方法是创建重复动画,每5秒改变一次背景,否则如果你创建倒计时,那么每个项目都有一个对象,这也是一个递归函数,wud定义为放慢你的滚动速度。。。我想动画是最适合这里的。。。。
CountDownTimer remainingTimeCounter = new CountDownTimer(futureInMillis, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
// TODO: restart counter
futureInMillis = newTime(); // set the same futureInMillis to make it periodic
this.start();
listView.getChildAt(i).setBackgroundColor(color);
}
}.start();