0

行に TextViews を含む ListView があります。一部の行では、TextView を一緒に点滅させたいと思います。つまり、同時にオン/オフします。それらを同期する方法はありますか?

私のアプリは Android 8 API と互換性があるため、ObjectAnimator はオプションではありません。

現在の実装では、奇妙な動作が発生します。テキストビューの点滅が同期されないだけでなく、スクロールすると、アニメーションが FF で実行され、通常の速度で安定するように、TextView が数回すばやく点滅することがあります。

これが私のコードです:

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 に答える