简答的秒杀倒计时
来源:互联网 发布:张艾嘉爱的代价 知乎 编辑:程序博客网 时间:2024/05/22 03:15
CountTimeView
public class CountTimeView extends LinearLayout implements Runnable { private TextView tv_hour; private TextView tv_minute; private TextView tv_second; private onStopListener stopListener; private Context context; private long mHour, mMin, mSecond;//小时,分钟,秒 private boolean run=false; //是否启动了 private TextView sep_hour; private TextView sep_second; private TextView tv_pre; public CountTimeView(Context context) { super(context); init(context); } public CountTimeView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { this.context=context; View view = View.inflate(context, R.layout.count_time_layout, this); tv_hour = (TextView) view.findViewById(R.id.hour); tv_minute = (TextView) view.findViewById(R.id.minute); tv_second = (TextView) view.findViewById(R.id.second); sep_hour = (TextView) view.findViewById(R.id.sep_hour); sep_second = (TextView) view.findViewById(R.id.sep_second); tv_pre = (TextView) view.findViewById(R.id.tv_pre); } /** * 设置提示文字 如:离抢购结束还剩: * @param text */ public void setPreText(String text){ tv_pre.setText(text); } /** * 设置字体大小 * @param size */ public void setTextSize(int size){ size = dip2px(context, size); tv_hour.setTextSize(size); tv_minute.setTextSize(size); tv_second.setTextSize(size); sep_hour.setTextSize(size); sep_second.setTextSize(size); tv_pre.setTextSize(size+2); } /** * 设置倒计时时间 * @param times 传一个数组,分别为小时,分钟,秒 */ public CountTimeView setTimes(long[] times) { mHour = times[0]; mMin = times[1]; mSecond = times[2]; return this; } /** * 倒计时计算 */ private void ComputeTime() { mSecond--; if (mSecond < 0) { mMin--; mSecond = 59; if (mMin < 0) { mMin = 59; mHour--; if (mHour <0) { // 倒计时结束 mHour=0; mSecond=0; mMin=0; stop(); } } } } public boolean isRun() { return run; } /** * 开始倒计时 */ public void start() { if(run)return; if(mHour==0&&mMin==0&&mSecond==0)return; this.run = true; run(); } /** * 停止计时 */ public void stop(){ this.run = false; //倒计时完成监听 if(stopListener!=null){ stopListener.stopListener(mHour,mMin,mSecond); } if (mListRefreshList.size()>0) { for (int i =0; i< mListRefreshList.size();i++) { mListRefreshList.get(i).onRefreshListerner(); } } } /** * 在onDestroy方法移除回调 */ public void removeCallbacks(){ removeCallbacks(this); } @Override public void run() { //标示已经启动 if(run){ ComputeTime(); setText(); postDelayed(this, 1000); }else { removeCallbacks(this); } } private void setText(){ if(mHour<=9){ tv_hour.setText("0"+mHour); }else { tv_hour.setText(""+mHour); } if(mMin<=9){ tv_minute.setText("0"+mMin); }else { tv_minute.setText(""+mMin); } if(mSecond<=9){ tv_second.setText("0"+mSecond); }else { tv_second.setText(""+mSecond); } } /** * 设置倒计时完成的监听 * @param stopListener */ public void setOnStopListener(onStopListener stopListener){ this.stopListener=stopListener;}//******************************************************************************************************** private static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } private List<IDataRefreshListener> mListRefreshList = new ArrayList<>(); public interface IDataRefreshListener { public void onRefreshListerner(); } public void addDataOnRefreshListener (IDataRefreshListener listener){ mListRefreshList.add(listener); } public void removeDataOnRefreshListener(IDataRefreshListener listener) { mListRefreshList.remove(listener); } public interface onStopListener{ void stopListener(long hour, long min, long second); }}
count_time_layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:textColor="@color/small_gray_color" android:textSize="13sp" android:id="@+id/tv_pre" android:text="距离抢购结束还有:" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_marginTop="8dp" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="00" android:textSize="18sp" android:textColor="#fff" android:background="@drawable/shape_count_time" android:id="@+id/hour" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:textSize="18sp" android:textColor="@color/gray_black" android:textStyle="bold" android:id="@+id/sep_hour" android:text=":" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="00" android:textSize="18sp" android:textColor="#fff" android:background="@drawable/shape_count_time" android:id="@+id/minute" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:textSize="18sp" android:textColor="@color/gray_black" android:textStyle="bold" android:id="@+id/sep_second" android:text=":" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:textSize="18sp" android:text="00" android:textColor="#fff" android:background="@drawable/shape_count_time" android:id="@+id/second" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></LinearLayout>
shape_count_time.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="3dp" /><!-- 设置圆角半径 --> <solid android:color="@color/gray_black"/><!-- 填充的颜色 --> <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"/><!-- 各方向的间隔 --></shape>
使用
countTime.setTimes(new long[]{1,4,3}).start();
阅读全文
0 0
- 简答的秒杀倒计时
- iOS中 简单易懂的秒杀倒计时/倒计时
- iOS中 简单易懂的秒杀倒计时/倒计时
- 秒杀倒计时的js脚本
- 秒杀倒计时的js脚本
- 仿京东淘宝的秒杀倒计时实现
- C# 秒杀倒计时
- 团购、秒杀倒计时
- 倒计时显示 秒杀
- 商城秒杀倒计时
- IOS倒计时秒杀
- iOS秒杀倒计时
- CountdownView秒杀倒计时
- Android 秒杀倒计时
- 秒杀活动倒计时 倒计时的实现,显示剩余天、时、分、秒
- PHP商品秒杀倒计时
- 秒杀倒计时JS代码
- 每日定点秒杀倒计时
- iOS多线程之GCD简单解析
- POJ-2240 Arbitrage(最短路)
- 复选框获取值js或jq
- 什么情况下应该建立索引 索引优化及分析
- 委托
- 简答的秒杀倒计时
- ActiveMQ学习笔记
- 存储过程的学习及java调用
- 【ORA-01922】oracle私有dblink无法通过限定owner删除的原因
- CocoaPods 安装 使用
- 插入排序
- Webpack(一)
- Javascript缓存API
- Spring整合JMS(一)——基于ActiveMQ实现