您的位置:首页 > 移动开发 > Android开发

android 列表倒计时流畅的完美实现

2016-01-19 10:50 555 查看
本博客由gengqiquan原创,转载请注明出处http://blog.csdn.net/gengqiquan/article/details/50541007,尊重他人的技术劳动成果,谢谢

最近宣传自己新写的一个APP的时候,好多开发朋友都在询问我首页的列表倒计时如何实现的,看起来很流畅啊!可见大家被倒计时坑的还是比较多的。



本篇博客的方案是参考了网上众多方案后,取精华精简的一套方案,废话止步,上代码。就一个类

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技术问题,有兴趣的可以加下,大家一起进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息