Android 倒计时功能
来源:互联网 发布:黄金比例算法 编辑:程序博客网 时间:2024/04/30 12:36
最近项目需要加一个倒计时功能,大致效果为:
如果天数为零需要显示 3时35分57秒,以此类推;
还需要在listview条目中显示倒计时功能,条目中有个圆形的区域
对于第一种效果由于只显示一个,可以直接用CountDownTimer来完成,代码如下:
private Button btnInvest; private TimeCount timeLast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //开始倒计时,倒计时数据应该从网络获取 timeLast = new TimeCount(Long.valueOf("10000"), 1000); timeLast.start(); } @Override public void onResume() { super.onResume();//判断是否开始倒计时,如果开始倒计时则取消,主要是为了和网络数据统一 if(timeLast != null){ timeLast.cancel(); } //开始倒计时,此处的倒计时数据应该从网络获取 timeLast = new TimeCount(Long.valueOf("1000"), 1000); timeLast.start();} class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval);//参数依次为总时长,和计时的时间间隔 } @Override public void onFinish() {//计时完毕时触发 btnInvest.setBackgroundDrawable(currFragAct.getResources().getDrawable(R.mipmap.btn_blue_home)); btnInvest.setText("倒计时结束"); } @Override public void onTick(long millisUntilFinished) {//计时过程显示 long day = millisUntilFinished /1000/60/60/24; long hours = (millisUntilFinished - day*24*60*60*1000)/1000/60/60; long minutes = (millisUntilFinished - day*24*60*60*1000 - hours*1000*60*60)/1000/60; long seconds = (millisUntilFinished - day*24*60*60*1000 - hours*1000*60*60 - minutes*1000*60)/1000; if(day > 0){ btnInvest.setText("剩余"+day+"天"+hours+"时"+minutes+"分"+seconds+"秒"); }else if(hours > 0){ btnInvest.setText("剩余"+hours+"时"+minutes+"分"+seconds+"秒"); }else if(minutes > 0){ btnInvest.setText("剩余"+minutes+"分"+seconds+"秒"); }else{ btnInvest.setText("剩余"+seconds+"秒"); } } }
但是对于listview条目的倒计时,用上面的方法就不行了,会出现错乱,简单来说就是复用的textview都会出现倒计时,最后使用了handler来解决,代码如下:
private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); handler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what ==1024) { investAdapter.notifyDataSetChanged(); //每隔1秒更新一次界面 handler.sendEmptyMessageDelayed(1024,1000); } } }; }public class InvestAdapter extends MyBaseAdapter{ public List<LoanVo> list; //省略好多代码。。。。 @Override public View getView(final int i, View view, ViewGroup viewGroup) { //这里其他没用的代码我就不贴了LoanVo data =list.get(i);if(data.getTimeCount() != null && data.getTimeCount().length() > 0){ if(Long.valueOf(data.getTimeCount()) != 0){ long tempTime =Long.valueOf(data.getTimeCount()); long day = tempTime /60/60/24; long hours = (tempTime - day*24*60*60)/60/60; long minutes = (tempTime - day*24*60*60 - hours*60*60)/60; long seconds = (tempTime - day*24*60*60 - hours*60*60 - minutes*60); if(day > 0){ investFlag.setText("倒计时\n"+day+"天"+hours+"时"); }else if(hours > 0){ investFlag.setText("倒计时\n"+hours+"时"+minutes+"分"); }else if(minutes > 0){ investFlag.setText("倒计时\n"+minutes+"分"+seconds+"秒"); }else{ investFlag.setText("倒计时\n"+seconds+"秒"); } }else{ data.showClock = 0; } } } private Thread thread; public void start() { thread = new Thread() { public void run() { while (true) { try { sleep(1000); if (list != null) { for (LoanVo item : list) { if(item.getTimeCount() != null && item.getTimeCount().length() > 0){ //item.timeCount = item.timeCount - 1; if(Long.valueOf(item.getTimeCount()) == 0){ item.setTimeCount("0"); }else{ item.setTimeCount((Long.valueOf(item.getTimeCount()) - 1) + ""); } } } } } catch (InterruptedException e) { e.printStackTrace(); } } } }; thread.start();}
代码大致就是这个样子
0 0
- android 实现倒计时功能
- Android倒计时功能实现
- Android 倒计时功能
- android中倒计时功能
- android实现倒计时功能
- android ValueAnimator倒计时功能
- Android 倒计时功能实现
- Android ListView倒计时功能
- Android实现倒计时功能
- android 短信验证倒计时功能
- Android倒计时功能的实现
- android倒计时功能(CountDownTimer)
- Android Tip 之倒计时功能
- Android 倒计时功能的实现
- android倒计时功能的实现
- Android 验证码倒计时功能
- Android如何实现倒计时功能
- 简单实现Android倒计时功能
- 找到升华思想的大门和钥匙
- ANSYS 16.2 64位下载 附安装教程
- android TV-Building TV Channels,Developing a TV Input Service
- Excel.dll生成
- 客户端通过Rados模块控制ceph存储集群
- Android 倒计时功能
- 数据库设计原则(转载)
- android minSdkVersion maxSdkVersion targetSdkVersion build target
- EasyRecovery(超级数据恢复软件) v11.1 汉化中文企业版
- Storm常见模式------TimeCacheMap
- 为data盘添加磁盘(asm external)
- 欢迎使用CSDN-markdown编辑器
- unity中的简单水效果实现
- iOS开发常用的第三方资源