博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己定义控件----倒计时控件
阅读量:7109 次
发布时间:2019-06-28

本文共 3711 字,大约阅读时间需要 12 分钟。

先上效果图:

这里写图片描写叙述
由于时分秒都有自己的背景色等布局,所以重写一个textview 不够灵活,所以我们自己定义一个TimeTextView继承自Linearlayout 然后再在里面放几个textview即可。
先看 布局文件吧:

然后就是自己定义的linearlayout了。

/** * 倒计时 3文本 * Created By Fangchao On 2015/3/12 */public class TimeTextView extends LinearLayout {
private long mday, mhour, mmin, msecond;//天,小时,分钟,秒 private boolean run = false; //是否启动了 Timer timer = new Timer(); TextView Vhour, Vmin, Vseconds; public TimeTextView(Context context) { super(context); iniUI(context); } public TimeTextView(Context context, AttributeSet attrs) { super(context, attrs); iniUI(context); } public void iniUI(Context context) { LayoutInflater mInflater = LayoutInflater.from(context); View myView = mInflater.inflate(R.layout.view_time_texviews, null); Vhour = (TextView) myView.findViewById(R.id.tv_hours); Vmin = (TextView) myView.findViewById(R.id.tv_minutes); Vseconds = (TextView) myView.findViewById(R.id.tv_seconds); addView(myView); } public TimeTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); iniUI(context); } private Handler mHandler = new Handler() { }; public boolean isRun() { return run; } public void setRun(boolean run) { this.run = run; } public void start() { if (!isRun()) { setRun(true); timer.schedule(task, 1000, 1000); } } /** * 依据传进来的时间差 为textview 赋值 * * @param duration */ public void setTimes(long duration) { Date date = new Date(duration); Date date1 = new Date(1L); /*mday = duration / 60000 / 60 / 24; mhour = (duration - mday * 6000 * 60 * 24) / 3600000; mmin = (duration - mhour * 6000 * 60 - mday * 3600000 * 24) / 60000; msecond = (duration - mmin * 60000 - mhour * 3600000 - mday * 3600000 * 24) / 60000;*///须要改动,測试用 mday = date.getDay(); mhour = date.getHours(); mmin = date.getMinutes(); msecond = date.getSeconds(); } /** * 倒计时计算 */ private void ComputeTime() { msecond--; if (msecond < 0) { mmin--; msecond = 59; if (mmin < 0) { mmin = 59; mhour--; if (mhour < 0) { // 倒计时结束 mhour = 24; mday--; } } } } TimerTask task = new TimerTask() { @Override public void run() { mHandler.post(new Runnable() { // UI thread @Override public void run() { run = true; ComputeTime(); if (mday < 0) { setVisibility(View.GONE); setRun(false); } Vhour.setText(mhour < 10 ? ("0" + mhour) : mhour + ""); Vseconds.setText(msecond < 10 ?

("0" + msecond) : msecond + ""); Vmin.setText(mmin < 10 ? ("0" + mmin) : mmin + ""); } }); } }; }

用的时候直接在须要的地方直接把TimeTextview 放上即可了,

举个样例吧,能够在adapter中设置倒计时时长。。。。

@Override    public void onBindHeaderView(RecyclerView.ViewHolder holder, int position) {        HeaderViewHolder headViewHolder = (HeaderViewHolder) holder;        long duration=  1426244976513L + 200 * 1000 - TimeUtils.getCurrentTimeInLong();        Log.e("long///", TimeUtils.getCurrentTimeInLong() + "");        if (!headViewHolder.timeTextView.isRun()) {            headViewHolder.timeTextView.setTimes(duration);            headViewHolder.timeTextView.start();        }    }
你可能感兴趣的文章
jfinal框架教程-学习笔记(二)
查看>>
MapReduce实现排序功能
查看>>
Android -- 内容观察者
查看>>
SSH框架总结(框架分析+环境搭建+实例源代码下载)
查看>>
iOS IAP教程
查看>>
aop注解 事例
查看>>
Fragment
查看>>
转发)微博短网址生成算法原理
查看>>
[再寄小读者之数学篇](2014-07-16 与对数有关的不等式)
查看>>
Android静态图片人脸识别的完整demo(附完整源码)
查看>>
Oracle 11g安装GI后,运行roothas.pl脚本报错libcap.so.1找不到
查看>>
Why Hadoop2
查看>>
atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
查看>>
Git操作指南
查看>>
FORM验证简单demo
查看>>
FindWindow使用方法
查看>>
数据挖掘十大经典算法
查看>>
VirtualBox 扩展虚拟硬盘容量
查看>>
iBeacon怎样工作
查看>>
【BZOJ】1627: [Usaco2007 Dec]穿越泥地(bfs)
查看>>