0

我有一个 ListView 在其行中包含 TextViews。在某些行上,我希望 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;
}
4

2 回答 2

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();
    }
}
于 2013-04-06T10:28:56.550 回答
0

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

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

于 2013-04-06T10:30:41.620 回答