如何使ListView中的TextViews同时闪烁

时间:2013-04-06 10:11:44

标签: android android-listview android-animation android-view

我的行中包含一个包含TextViews的ListView。在某些行上,我希望TextView一起闪烁,我的意思是同时打开/关闭。 任何想法如何同步它们?

我的应用与Android 8 API兼容,因此ObjectAnimator不适合我。

使用我当前的实现,我得到一个奇怪的行为 - 不仅文本视图闪烁不同步,但是当我滚动时,有时看到TextView快速闪烁几次,如动画在FF上运行然后稳定在正常情况下率。

这是我的代码:

public View getView(int position, View convertView, ViewGroup parent) {
    Holder holder;
    if (convertView == null) {
        LayoutInflater inflater = getLayoutInflater();
        convertView = inflater.inflate(R.layout.rowt, parent, false);
        holder = new Holder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }

    ListRowUID data = (PollsListRowUID) getItem(position);
    if (data != null) {
        holder.dateTextView.setText(data.Date); 
        if (data.Date.equals(holder.inProgressText)) // turn the animation on/off
            holder.dateTextView.setAnimation(holder.blink);
        else 
            holder.dateTextView.setAnimation(null);
        holder.favoritesTextView.setText("" + data.FavoritesNum);
        holder.favoritesImageView.setImageResource(data.MarkedAsFavorite ? R.drawable.favorite_full_small : R.drawable.favorite_empty_small);
    } 
    return (convertView);
}

private class Holder {


    public Holder(View convertView) {
        dateTextView = (TextView) convertView.findViewById(R.id.dateTextView);
        inProgressText = convertView.getResources().getString(R.string.in_progress); 
        favoritesTextView = (TextView) convertView.findViewById(R.id.favoritesTextView);
        favoritesImageView = (ImageView) convertView.findViewById(R.id.favoritesImageView);


        blink = new AlphaAnimation(0.0f, 1.0f);
        blink.setDuration(500); 
        blink.setStartOffset(20);
        blink.setRepeatMode(Animation.REVERSE);
        blink.setRepeatCount(Animation.INFINITE);


    }

    TextView dateTextView;
    TextView favoritesTextView;
    ImageView favoritesImageView;

    String inProgressText;
    Animation blink;
}

2 个答案:

答案 0 :(得分:0)

使用以下方法使TextView闪烁

private void blink(){
    final Handler handler = new Handler();
    new Thread(new Runnable() {
        @Override
        public void run() {
        int timeToBlink = 1000;    //in milissegunds
        try{Thread.sleep(timeToBlink);}catch (Exception e) {}
            handler.post(new Runnable() {
                @Override
                    public void run() {
                    TextView txt = (TextView) findViewById(R.id.usage);
                    if(txt.getVisibility() == View.VISIBLE){
                        txt.setVisibility(View.INVISIBLE);
                    }else{
                        txt.setVisibility(View.VISIBLE);
                    }
                    blink();
                }
                });
            }
        }).start();
    }
}

答案 1 :(得分:0)

如果您的列表足够小,您可以考虑使用垂直LinearLayout并将视图添加到其中。

这是让动画保持同步的简单方法。