1. public class MainActivity extends Activity {  
  2.   
  3.     /**截至时间数据源**/  
  4.     private List<Date> listData;  
  5.     /**当前时间**/  
  6.     private long time_Current;  
  7.     /**ListView控件**/  
  8.      private ListView listView;  
  9.      /**适配器**/  
  10.      private MyCountAdapter myCountAdapter;  
  11.       
  12.     //这里很重要,使用Handler的延时效果,每隔一秒刷新一下适配器,以此产生倒计时效果  
  13.     private Handler handler_timeCurrent = new Handler(){  
  14.         @Override  
  15.         public void handleMessage(Message msg) {  
  16.             time_Current = time_Current+1000;  
  17.             myCountAdapter.notifyDataSetChanged();                
  18.             handler_timeCurrent.sendEmptyMessageDelayed(0,1000);  
  19.         }  
  20.     };  
  21.       
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_main);  
  26.           
  27.         listView = (ListView) findViewById(R.id.listView);  
  28.         //模拟活动截至时间数据  
  29.         listData = new ArrayList<Date>();  
  30.         listData.add(new Date(2016,3,16,8,20,31));  
  31.         listData.add(new Date(2016,3,16,8,21,20));  
  32.         listData.add(new Date(2016,3,16,13,21,22));  
  33.         listData.add(new Date(2016,3,16,8,21,20));  
  34.         listData.add(new Date(2016,3,16,8,21,23));  
  35.         listData.add(new Date(2016,3,16,14,21,20));  
  36.         listData.add(new Date(2016,3,16,8,21,23));  
  37.         listData.add(new Date(2016,3,16,8,21,24));  
  38.         listData.add(new Date(2016,3,16,8,21,20));  
  39.         listData.add(new Date(2016,3,16,8,22,25));  
  40.         listData.add(new Date(2016,3,16,8,23,20));  
  41.         listData.add(new Date(2016,3,16,8,24,26));  
  42.         listData.add(new Date(2016,3,16,8,25,20));  
  43.         listData.add(new Date(2016,3,16,8,24,25));  
  44.         listData.add(new Date(2016,3,16,8,25,20));  
  45.         listData.add(new Date(2016,3,16,8,24,26));  
  46.         listData.add(new Date(2016,3,16,11,20,20));  
  47.         listData.add(new Date(2016,3,16,14,40,20));  
  48.         listData.add(new Date(2016,3,16,8,44,20));  
  49.         listData.add(new Date(2016,3,16,10,20,20));  
  50.           
  51.         //模拟当前服务器时间数据  
  52.         Date date = new Date(2016,3,16,8,20,20);  
  53.         time_Current = date.getTime();  
  54.           
  55.         myCountAdapter = new MyCountAdapter();  
  56.         listView.setAdapter(myCountAdapter);  
  57.           
  58.         handler_timeCurrent.sendEmptyMessageDelayed(0,1000);  
  59.     }  
  60.       
  61.     //防止当前Activity结束以后,   handler依然继续循环浪费资源  
  62.     @Override  
  63.     protected void onDestroy() {  
  64.         handler_timeCurrent.removeCallbacksAndMessages(null);  
  65.         super.onDestroy();  
  66.     }  
  67.       
  68.     public class MyCountAdapter extends BaseAdapter{  
  69.   
  70.         @Override  
  71.         public int getCount() {  
  72.             return listData.size();  
  73.         }  
  74.   
  75.         @Override  
  76.         public Object getItem(int position) {  
  77.             return listData.get(position);  
  78.         }  
  79.   
  80.         @Override  
  81.         public long getItemId(int position) {  
  82.             return position;  
  83.         }  
  84.   
  85.         @Override  
  86.         public View getView(int position, View convertView, ViewGroup parent) {  
  87.             ViewHolder holder = null;  
  88.             if(convertView == null){  
  89.                 convertView = View.inflate(MainActivity.this, R.layout.item_adapter_listview, null);  
  90.                 holder = new ViewHolder();  
  91.                 holder.tv_hour = (TextView) convertView.findViewById(R.id.tv_hour);  
  92.                 holder.tv_minute = (TextView) convertView.findViewById(R.id.tv_minute);  
  93.                 holder.tv_second = (TextView) convertView.findViewById(R.id.tv_second);  
  94.                 convertView.setTag(holder);  
  95.             }else{  
  96.                 holder = (ViewHolder) convertView.getTag();  
  97.             }  
  98.             Date date_finish = listData.get(position);  
  99.             updateTextView( date_finish.getTime()-time_Current, holder);  
  100.             return convertView;  
  101.         }  
  102.         /**** 
  103.          * 刷新倒计时控件 
  104.          */  
  105.         public void updateTextView(long times_remain,ViewHolder hoder) {  
  106.               
  107.             if (times_remain <= 0) {  
  108.                 hoder.tv_hour.setText("00");  
  109.                 hoder.tv_minute.setText("00");  
  110.                 hoder.tv_second.setText("00");  
  111.                 return;  
  112.             }  
  113.             //秒钟  
  114.             long time_second = (times_remain/1000)%60;  
  115.             String str_second;  
  116.             if (time_second < 10) {  
  117.                 str_second = "0" + time_second;  
  118.             } else {  
  119.                 str_second = "" + time_second;  
  120.             }  
  121.               
  122.             long time_temp = ((times_remain / 1000) - time_second) / 60;  
  123.             //分钟  
  124.             long time_minute = time_temp % 60;  
  125.             String str_minute;  
  126.             if (time_minute < 10) {  
  127.                 str_minute = "0" + time_minute;  
  128.             } else {  
  129.                 str_minute = "" + time_minute;  
  130.             }  
  131.               
  132.             time_temp = (time_temp - time_minute) / 60;  
  133.             //小时  
  134.             long time_hour = time_temp;  
  135.             String str_hour;  
  136.             if (time_hour < 10) {  
  137.                 str_hour = "0" + time_hour;  
  138.             } else {  
  139.                 str_hour = "" + time_hour;  
  140.             }  
  141.               
  142.             hoder.tv_hour.setText(str_hour);  
  143.             hoder.tv_minute.setText(str_minute);  
  144.             hoder.tv_second.setText(str_second);  
  145.               
  146.         }  
  147.           
  148.         private class ViewHolder{  
  149.             /** 小时 **/  
  150.             private TextView tv_hour;  
  151.             /** 分钟 **/  
  152.             private TextView tv_minute;  
  153.             /** 秒 **/  
  154.             private TextView tv_second;       
  155.         }  
  156.     }  
  157.       
  158.   
  159. }  
posted on 2017-03-22 13:58  王丶先森  阅读(742)  评论(0编辑  收藏  举报