android 列表倒计时流畅的完美实现
2016-01-19 10:50
555 查看
本博客由gengqiquan原创,转载请注明出处http://blog.csdn.net/gengqiquan/article/details/50541007,尊重他人的技术劳动成果,谢谢
最近宣传自己新写的一个APP的时候,好多开发朋友都在询问我首页的列表倒计时如何实现的,看起来很流畅啊!可见大家被倒计时坑的还是比较多的。
本篇博客的方案是参考了网上众多方案后,取精华精简的一套方案,废话止步,上代码。就一个类
整个类就这么多代码了,核心就是内部handler加使用主线程的looper。由于是在主线程的,可以很好的解决页面显示混乱的问题,更新UI本来就是要在主线程的,同时做的事情也必须少而精简。
litview的grtview()里面调用的代码也就一句textView.setTimes( new Date().getTime());
我建了一个QQ群(群号:121606151),用于大家讨论交流Android技术问题,有兴趣的可以加下,大家一起进步。
最近宣传自己新写的一个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技术问题,有兴趣的可以加下,大家一起进步。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories