Android - 如何定期将列表项的背景颜色从透明切换为红色?

时间:2015-01-24 18:45:29

标签: android android-listview android-animation

我有一个列表视图我想通过每隔5秒将每个列表项的背景颜色从透明切换为红色来进行操作。这是我在自定义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;
}

我要做的是使用提供定期执行的Timer来切换每个列表元素的背景颜色。但究竟需要如何实施呢?或者是否有更优化的方法来实现相同的结果?

2 个答案:

答案 0 :(得分:0)

来自docs

 new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

您可以在CountDownTimer内为您创建的每一行开始此ListView

答案 1 :(得分:0)

您可以创建一个背景Thread(以避免在存在巨大的ListItem麻烦的情况下阻止主要用户Thread阻止),您可以在其中创建定期Timer和一段时间完成后,您可以查看所有ListView项并更改背景颜色:listView.getChildAt(position).setBackgroundColor(color);

以下是一个例子:

    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();