Androidリストのカウントダウンをスムーズに実現

5690 ワード

このブログはgengqiquanオリジナルで、転載は出典を明記してくださいhttp://blog.csdn.net/gengqiquan/article/details/50541007ああ、他人の技術労働の成果を尊重して、ありがとうございます
最近、自分が新しく書いたアプリを宣伝しているとき、多くの開発者の友达が私のトップページのリストのカウントダウンをどのように実現したのかを聞いていて、流暢に見えますね.カウントダウンピットが多いことがわかります.このブログの案は、ネット上の多くの案を参考にした後、精華を取って簡素な案を取り、くだらないことをやめ、コードをつけることです.クラスは1つだけ
import java.util.Date;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import com.qbs.itrytryc.R;

public class TimeTextView extends TextView {
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        //            
        handler.removeMessages(0);
    }

    long Time;
    private boolean run = true; //      
    @SuppressLint("NewApi")
    private Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
                if (run) {
                    long mTime = Time;
                    if (mTime > 0) {
                        String day = "";
                            TimeTextView.this.setText("         " + Time+"s");
                            Time = Time - 1000;
                            handler.sendEmptyMessageDelayed(0, 1000);
                        }
                    } else {
                        TimeTextView.this.setVisibility(View.GONE);
                    }

                }
                break;
            }
        }
    };


    public TimeTextView(Context context) {
        super(context);
    };

    public TimeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TimeTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @SuppressLint("NewApi")
    public void setTimes(long mT) {
        //       
        Date date = new Date();
        long t2 = date.getTime();
        Time = mT - t2;
        date = null;

        if (Time > 0) {
            handler.removeMessages(0);
            handler.sendEmptyMessage(0);
        } else {
            TimeTextView.this.setVisibility(View.GONE);
        }
    }

    public void stop() {
        run = false;
    }
}

クラス全体にこんなに多くのコードがあり、コアは内部handlerがメインスレッドを使用するlooperです.メインスレッドであるため、ページ表示の混乱をうまく解決することができ、UIの更新はもともとメインスレッドで行われるものであり、同時に行うことも少なく、簡素化されなければならない.litviewのgrtview()で呼び出されたコードもtextView.settimes(new Date().gettime();
私はQQグループ(グループ番号:121606151)を建てて、Androidの技術問題を議論するために使用して、興味があるのは加えて、みんなで進歩することができます.