Android 中不用线程如何实现倒计时
程序员文章站
2024-02-23 10:38:34
需求:
有多个组件可以开启倒计时,正常情况下默认倒计时时间终了后更新ui,另,用户可以取消指定倒计时。
这里使用countdowntimer进行倒计时,其中回调函数on...
需求:
有多个组件可以开启倒计时,正常情况下默认倒计时时间终了后更新ui,另,用户可以取消指定倒计时。
这里使用countdowntimer进行倒计时,其中回调函数onfinish是在倒计时终了时回调,ontick是在倒计时开始时回调,用户可以使用countdowntimer对象的cancel方法取消倒计时。
这样做的好处:不需要使用繁琐的线程去控制倒计时,更方便的进行ui更新。
上代码:
mainactivity
package test.demo.countdowntest; import android.os.bundle; import android.os.countdowntimer; import android.support.v7.app.appcompatactivity; import android.view.view; import android.widget.button; import android.widget.progressbar; import android.widget.toast; public class mainactivity extends appcompatactivity implements view.onclicklistener{ private button bt1, bt2, bt3; private progressbar pb1, pb2, pb3; private mycount mc1,mc2, mc3; private boolean mc1click = false; private boolean mc2click = false; private boolean mc3click = false; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bt1 = ((button) findviewbyid(r.id.bt1)); bt2 = ((button) findviewbyid(r.id.bt2)); bt3 = ((button) findviewbyid(r.id.bt3)); bt1.setonclicklistener(this); bt2.setonclicklistener(this); bt3.setonclicklistener(this); pb1 = ((progressbar) findviewbyid(r.id.pb1)); pb2 = ((progressbar) findviewbyid(r.id.pb2)); pb3 = ((progressbar) findviewbyid(r.id.pb3)); mc1 = new mycount(30000, 1000); mc1.setpb(bt1, pb1); mc2 = new mycount(30000, 1000); mc2.setpb(bt2, pb2); mc3 = new mycount(30000, 1000); mc3.setpb(bt3, pb3); } @override public void onclick(view view) { switch (view.getid()) { case r.id.bt1: if (mc1click) { mc1.cancel(); pb1.setvisibility(view.gone); mc1click = false; } else { pb1.setvisibility(view.visible); mc1.start(); mc1click = true; } break; case r.id.bt2: if (mc2click) { pb2.setvisibility(view.gone); mc2.cancel(); mc2click = false; } else { pb2.setvisibility(view.visible); mc2.start(); mc2click = true; } break; case r.id.bt3: if (mc3click) { pb3.setvisibility(view.gone); mc3.cancel(); mc3click = false; } else { pb3.setvisibility(view.visible); mc3.start(); mc3click = true; } break; } } /*定义一个倒计时的内部类*/ class mycount extends countdowntimer { button mbt; progressbar mpb; public mycount(long millisinfuture, long countdowninterval) { super(millisinfuture, countdowninterval); } public void setpb(button bt, progressbar pb) { mbt = bt; mpb = pb; } @override public void onfinish() { mpb.setvisibility(view.gone); } @override public void ontick(long millisuntilfinished) { mbt.settext("请等待30秒(" + millisuntilfinished / 1000 + ")..."); toast.maketext(mainactivity.this, millisuntilfinished / 1000 + "", toast.length_long).show(); } } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="cn.sh.changxing.countdowntest.mainactivity"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <button android:id="@+id/bt1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="测试启动1"/> <progressbar android:id="@+id/pb1" style="?android:attr/progressbarstylesmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:indeterminate="true"/> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <button android:id="@+id/bt2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="测试启动2"/> <progressbar android:id="@+id/pb2" style="?android:attr/progressbarstylesmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:indeterminate="true"/> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <button android:id="@+id/bt3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="测试启动3"/> <progressbar android:id="@+id/pb3" style="?android:attr/progressbarstylesmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:indeterminate="true"/> </linearlayout> </linearlayout>
以上所述是小编给大家介绍的android 中不用线程如何实现倒计时,希望对大家有所帮助
上一篇: android SQLite数据库总结
推荐阅读
-
Android中闪屏实现方法小结(普通闪屏、倒计时闪屏、倒计时+动画闪屏)
-
详解如何在Android中实现悬浮Activity
-
Android 中不用线程如何实现倒计时
-
[原创] 如何在android中实现shake的动作检测 - part 1 博客分类: Android AndroidHTML5咨询浏览器Flash
-
[原创] 如何在android中实现shake的动作检测 - part 1 博客分类: Android AndroidHTML5咨询浏览器Flash
-
[原创] 如何在android中实现swipe的手势功能及页面拖动动画 博客分类: Android AndroidSymbianC#C++C
-
Android中Handler实现倒计时的两种方式
-
用 redis-sentinel 做 redis 集群,如何实现当master挂掉后,不用修改程序中的配置
-
android开发中如何实现连按两次返回键退出程序
-
Android 中启动自己另一个程序的activity如何实现