我的行中包含一个包含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;
}
答案 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
并将视图添加到其中。
这是让动画保持同步的简单方法。