一个简单的自定义view。在里面封装了时间的倒计时,以及距离现在时间的时间计算
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174public class TimerTextView extends LinearLayout{ // 时间变量 private long second; private TextView tv_Time; private TextView tv_Unit; RefreshCallBack refreshCallBack; public TimerTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } public TimerTextView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public TimerTextView(Context context) { super(context); initView(context); } private void initView(Context context) { // 加载布局 LayoutInflater.from(context).inflate(R.layout.timer_text_view, this); tv_Time = (TextView) findViewById(R.id.countdown_time); tv_Unit = (TextView) findViewById(R.id.countdown_unit); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); // 在控件被销毁时移除消息 handler.removeMessages(0); } private boolean isRun = true; // 是否启动了 private Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: if (isRun) { if (second > 0) { second = second - 1; handler.sendEmptyMessageDelayed(0, 1000); }else{ if(null != refreshCallBack){ refreshCallBack.refreshCallBack(true); isRun = false; } } } break; } } }; public boolean isRun() { return isRun; } /** * 开始计时 */ public void start() { isRun = true; handler.removeMessages(0); handler.sendEmptyMessage(0); } /** * 结束计时 */ public void stop() { isRun = false; } public void diffTime(String endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); String startTime = sdf.format(new Date()); String format = "yyyy-MM-dd hh:mm:ss"; //按照传入的格式生成一个simpledateformate对象 SimpleDateFormat sd = new SimpleDateFormat(format); long nd = 1000 * 24 * 60 * 60;//一天的毫秒数 long nh = 1000 * 60 * 60;//一小时的毫秒数 long nm = 1000 * 60;//一分钟的毫秒数 long ns = 1000;//一秒钟的毫秒数long diff;try { //获得两个时间的毫秒时间差异 long diff = 0; try { diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime(); } catch (ParseException e) { e.printStackTrace(); } if (diff < 0) { if(null != refreshCallBack){ refreshCallBack.showCallBack(false); } return ; } else { if(null != refreshCallBack){ refreshCallBack.showCallBack(true); } long day = diff / nd;//计算差多少天 if (day > 0) { tv_Time.setText(String.valueOf(day)); tv_Unit.setText("天"); } else { long hour = diff % nd / nh;//计算差多少小时 if (hour > 0) { tv_Time.setText(String.valueOf(hour)); tv_Unit.setText("小时"); } else { long min = diff % nd % nh / nm;//计算差多少分钟 if (min > 0) { tv_Time.setText(String.valueOf(min)); tv_Unit.setText("分钟"); } else { second = diff%nd%nh%nm/ns;//计算差多少秒//输出结果 // if(min > 0){ // stringBuffer.append(sec+"秒"); // } handler.removeMessages(0); handler.sendEmptyMessage(0); tv_Unit.setText("即将开始"); tv_Time.setVisibility(GONE); } } } } } public void setTextViewSize(int size){ if(null != tv_Time){ tv_Time.setTextSize(size); } if(null != tv_Unit){ tv_Unit.setTextSize(size); } } public void setTextViewSpace(String type){ if("Big".equals(type)){ LinearLayout.LayoutParams lp2 = (LayoutParams) tv_Time.getLayoutParams(); lp2.setMargins(0, 0, DensityUtil.dip2px(tv_Time.getContext(), 12), 0); tv_Time.setLayoutParams(lp2); tv_Time.setBackground(getResources().getDrawable(R.drawable.bg_video_count_down)); }else if("Middle".equals(type)){ tv_Time.setPadding(12, 0, 12, 0); LinearLayout.LayoutParams lp2 = (LayoutParams) tv_Time.getLayoutParams(); lp2.setMargins(0, 0,12, 0); tv_Time.setLayoutParams(lp2); }else { tv_Time.setPadding(8, 0, 8, 0); LinearLayout.LayoutParams lp2 = (LayoutParams) tv_Time.getLayoutParams(); lp2.setMargins(0, 0, 8, 0); tv_Time.setLayoutParams(lp2); } } public void setRefreshCallBack(RefreshCallBack refreshCallBack){ this.refreshCallBack = refreshCallBack; } public interface RefreshCallBack { public void refreshCallBack(boolean flag); public void showCallBack(boolean flag); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是笨笨小蜜蜂最近收集整理的关于Android自定义view倒计时60秒的全部内容,更多相关Android自定义view倒计时60秒内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复