Android 之高仿活动时分秒倒计时
2017-10-31 10:53
246 查看
import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import java.util.Timer; import java.util.TimerTask; /** * Created by Administrator on 2017/10/31. */ public class RushBuyCountDownTimerView extends LinearLayout { // 天,十位 private TextView tv_day_decade; // 天,个位 private TextView tv_day_unit; // 小时,十位 private TextView tv_hour_decade; // 小时,个位 private TextView tv_hour_unit; // 分钟,十位 private TextView tv_min_decade; // 分钟,个位 private TextView tv_min_unit; // 秒,十位 private TextView tv_sec_decade; // 秒,个位 private TextView tv_sec_unit; private Context context; private long day_decade; private long day_unit; private long hour_decade; private long hour_unit; private long min_decade; private long min_unit; private long sec_decade; private long sec_unit; // 计时器 private Timer timer; private Handler handler = new Handler() { public void handleMessage(Message msg) { countDown(); }; }; private int day = 0; private int hour = 0; private int min = 0; private int sec = 0; public RushBuyCountDownTimerView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.view_countdowntimer, this); tv_hour_decade = (TextView) view.findViewById(R.id.tv_hour_decade); tv_hour_unit = (TextView) view.findViewById(R.id.tv_hour_unit); tv_day_decade = (TextView) view.findViewById(R.id.tv_day_decade); tv_day_unit = (TextView) view.findViewById(R.id.tv_day_unit); tv_min_decade = (TextView) view.findViewById(R.id.tv_min_decade); tv_min_unit = (TextView) view.findViewById(R.id.tv_min_unit); tv_sec_decade = (TextView) view.findViewById(R.id.tv_sec_decade); tv_sec_unit = (TextView) view.findViewById(R.id.tv_sec_unit); } /** * * @Description: 开始计时 * @param * @return void * @throws */ public void start() { if (timer == null) { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(0); } }, 0, 1000); } } /** * * @Description: 停止计时 * @param * @return void * @throws */ public void stop() { if (timer != null) { timer.cancel(); timer = null; } } // 如果:sum = 12345678 public void addTime(long sum) { // 求出天数 long day = sum / 60 / 60 / 24; // int day_time = sum % 24; Log.e("小时", day + ""); Log.e("小时", sum % 24 + ""); // 求出小时 // int hour = day_time / 60; // int hour_time = day_time % 60; // // Log.e("小时", hour + ""); // // 先获取个秒数值 long sec = sum % 60; // 如果大于60秒,获取分钟。(秒数) long sec_time = sum / 60; // 再获取分钟 long min = sec_time % 60; // 如果大于60分钟,获取小时(分钟数)。 long min_time = sec_time / 60; // 获取小时 long hour = min_time % 24; // 剩下的自然是天数 day = min_time / 24; // // Log.e("分钟", min + ""); // // // 求出秒数 // Log.e("秒数", sec + ""); setTime(day, hour, min, sec); } /** * @throws Exception * * @Description: 设置倒计时的时长 * @param * @return void * @throws */ public void setTime(long day, long hour, long min, long sec) { //这里的天数不写也行,我写365 if (day >= 365 || hour >= 24 || min >= 60 || sec >= 60 || day < 0 || hour < 0 || min < 0 || sec < 0) { throw new RuntimeException( "Time format is error,please check out your code"); } // day 的十位数 day_decade = day / 10; // day的个位数,这里求余就行 day_unit = day - day_decade * 10; hour_decade = hour / 10; hour_unit = hour - hour_decade * 10; min_decade = min / 10; min_unit = min - min_decade * 10; sec_decade = sec / 10; sec_unit = sec - sec_decade * 10; // 第个time 进行初始化 timeClean(); } private void timeClean() { tv_day_decade.setText(day_decade + ""); tv_day_unit.setText(day_unit + ""); tv_hour_decade.setText(hour_decade + ""); tv_hour_unit.setText(hour_unit + ""); tv_min_decade.setText(min_decade + ""); tv_min_unit.setText(min_unit + ""); tv_sec_decade.setText(sec_decade + ""); tv_sec_unit.setText(sec_unit + ""); } /** * * @Description: 倒计时 * @param * @return boolean * @throws */ public Boolean countDown() { if (isCarry4Unit(tv_sec_unit)) { if (isCarry4Decade(tv_sec_decade)) { if (isCarry4Unit(tv_min_unit)) { if (isCarry4Decade(tv_min_decade)) { if (isDay4Unit(tv_hour_unit)) { if (isDay4Decade(tv_hour_decade)) { if (isDay4Unit(tv_day_unit)) { if (isDay4Decade(tv_day_decade)) { Toast.makeText(context, "时间到了", Toast.LENGTH_SHORT).show(); tv_day_decade.setText("0"); tv_day_unit.setText("0"); tv_hour_decade.setText("0"); tv_hour_unit.setText("0"); tv_min_decade.setText("0"); tv_min_unit.setText("0"); tv_sec_decade.setText("0"); tv_sec_unit.setText("0"); stop(); return false; } } } } } } } } return false; } /** * 进行——时分秒,判断个位数 * * @Description: 变化十位,并判断是否需要进位 * @param * @return boolean * @throws */ private boolean isCarry4Decade(TextView tv) { int time = Integer.valueOf(tv.getText().toString()); time = time - 1; if (time < 0) { time = 5; tv.setText(time + ""); return true; } else { tv.setText(time + ""); return false; } } /** * 进行——时分秒,判断个位数 * * @Description: 变化个位,并判断是否需要进位 * @param * @return boolean * @throws */ private boolean isCarry4Unit(TextView tv) { int time = Integer.valueOf(tv.getText().toString()); time = time - 1; if (time < 0) { time = 9; tv.setText(time + ""); return true; } else { tv.setText(time + ""); return false; } } /** * 进行——时分秒,判断个位数 * * @Description: 变化十位,并判断是否需要进位 * @param * @return boolean * @throws */ private boolean isDay4Unit(TextView tv) { int time = Integer.valueOf(tv.getText().toString()); time = time - 1; if (time < 0) { time = 3; tv.setText(time + ""); return true; } else { tv.setText(time + ""); return false; } } /** * 进行——时分秒,判断个位数 * * @Description: 变化个位,并判断是否需要进位 * @param * @return boolean * @throws */ private boolean isDay4Decade(TextView tv) { int time = Integer.valueOf(tv.getText().toString()); time = time - 1; if (time < 0) { time = 2; tv.setText(time + ""); return true; } else { tv.setText(time + ""); return false; } } }
2.MainActivity
public class MainActivity extends AppCompatActivity {private RushBuyCountDownTimerView timerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);timerView = (RushBuyCountDownTimerView) findViewById(R.id.timerView);// 设置时间(day,hour,min,sec)// timerView.setTime(0, 0, 0, 5);long sum = 346471;// 把秒数传到倒计时方法中。。timerView.addTime(sum);// 开始倒计时timerView.start();}}
<?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:background="@android:color/white"android:orientation="horizontal"android:padding="10dp" ><TextViewandroid:id="@+id/tv_day_decade"android:layout_width="wrap_content"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_day_unit"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="1dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/white"android:gravity="center"android:text=":"android:textColor="#4F4242"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_hour_decade"android:layout_width="wrap_content"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_hour_unit"android:layout_width="wrap_content"android:layout_height="match_parent" android:layout_marginLeft="1dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/white"android:gravity="center"android:text=":"android:textColor="#4F4242"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_min_decade"android:layout_width="wrap_content"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_min_unit"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="1dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/white"android:gravity="center"android:text=":"android:textColor="#4F4242"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_sec_decade"android:layout_width="wrap_content"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_sec_unit"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="1dp" /></LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><com.artfoxlive.org.myapplication.RushBuyCountDownTimerViewandroid:id="@+id/timerView"android:layout_width="wrap_content"android:layout_height="wrap_content" ></com.artfoxlive.org.myapplication.RushBuyCountDownTimerView></LinearLayout>
相关文章推荐
- Android 之高仿活动时分秒倒计时
- Android 之高仿活动时分秒倒计时
- Android 之高仿活动时分秒倒计时
- Android仿活动时分秒倒计时效果
- Android Appium Server从启动到case完成的活动分析
- 【Android】53、碎片和活动之间进行通信
- 高仿QQ源码下载 (android前端+JAVA后台+spark<windows版聊天>)方便集成到自己系统
- Android 高仿 IOS 滚轮选择控件
- 【转】Android 当打开“开发者模式”中的“不保留活动”后,程序应当怎么保持正常运行
- [android ui]高仿360云盘android端的UI实现
- Android 高仿豌豆荚 一键安装app 功能 实现
- Android开发之旅:活动与任务
- Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
- Android学习 (三) 在活动之间穿梭之Intent
- 第六章 AXF (ActXmlFromFramework) 活动ANDROID页面展现框架 android动态加载页面框架
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭
- Android中“活动(Activity)的生命周期(lifeCycle)”
- 基于百度云推送的高仿微信实时聊天Android源码+
- 三星Android手机助力泰姆凯迪幼儿活动