直播app源码,定时开关,实现计时器功能
直播app源码,定时开关,实现计时器功能
计时器工具类
1 | <br>import android.annotation.SuppressLint;<br>import android.os.Handler;<br>import android.os.Message;<br> <br>import androidx.annotation.NonNull;<br> <br>import java.util.Timer;<br>import java.util.TimerTask;<br> <br> /**<br> * 用于计时,在主线程中使用此方法<br> */ <br> public class ChjTimer {<br> <br> private int time; //设置倒计时 X 秒<br> private int interval = 1000;//设置间隔时间<br> private ChjTimerInter chjTimerInter; //回调<br> private Timer timer; // 定时器<br> private static final int WHAT_REFREH = 0;//刷新<br> <br> /**<br> * 创建对象则开始计时<br> *<br> * @param chjTimerInter 接口回调<br> */<br> public ChjTimer(ChjTimerInter chjTimerInter) {<br> this.chjTimerInter = chjTimerInter;<br> }<br> <br> /**<br> * 创建对象开始计时<br> * @param interval 间隔时间通知(使用第一个方法,默认1秒钟刷新一次)<br> * @param chjTimerInter 接口回调<br> */<br> public ChjTimer(int interval, ChjTimerInter chjTimerInter) {<br> this.chjTimerInter = chjTimerInter;<br> this.interval = interval;<br> }<br> <br> /**<br> * 开始计时<br> */<br> public void start(int time) {<br> this.time = time;<br> if (timer == null){<br> timer = new Timer();<br> } else {<br> stop();<br> return;<br> }<br> timer.schedule(new TimerTask() {<br> @Override<br> public void run() {<br> timesss.sendMessage(new Message());<br> }<br> }, interval);<br> }<br> <br> /**<br> * 终止计时<br> */<br> public void stop() {<br> if (timer != null) {<br> timer.cancel();<br> timer = null;<br> }<br> if (timesss != null) timesss.removeMessages(WHAT_REFREH);<br> if (chjTimerInter != null)chjTimerInter.stop(time);<br> }<br> <br> @SuppressLint("HandlerLeak")<br> private Handler timesss = new Handler() {<br> @Override<br> public void handleMessage(@NonNull Message msg) {<br> super.handleMessage(msg);<br> if (msg.what != WHAT_REFREH) return;<br> time -= 1;<br> if (chjTimerInter != null) chjTimerInter.second(time);<br> if (time == 0) {<br> if (timer == null) return;<br> timer.cancel();<br> timer = null;<br> if (chjTimerInter != null) chjTimerInter.expire();<br> } else if (time > 0) {<br> timer.schedule(new TimerTask() {<br> @Override<br> public void run() {<br> timesss.sendMessage(new Message());<br> }<br> }, interval);<br> }<br> }<br> };<br> <br> /**<br> * 接口<br> */<br> public interface ChjTimerInter {<br> <br> /**<br> * 间隔时间内回调<br> */<br> void second(int time);<br> <br> /**<br> * 完成回调<br> */<br> void expire();<br> <br> /**<br> * 终止计时<br> */<br> void stop(int time);<br> <br> }<br> <br>} |
使用演示
1 | <br>import android.app.Activity;<br>import android.os.Bundle;<br>import android.view.View;<br>import android.widget.TextView;<br> <br> public class MainActivity extends Activity implements View.OnClickListener, ChjTimer.ChjTimerInter {<br> <br> private TextView tiems,timnew;<br> private ChjTimer chjTimer;<br> <br> @Override<br> protected void onCreate(Bundle savedInstanceState) {<br> super.onCreate(savedInstanceState);<br> setContentView(R.layout.activity_main);<br> tiems = findViewById(R.id.time);<br> timnew = findViewById(R.id.timnew);<br> findViewById(R.id.but).setOnClickListener(this);<br> findViewById(R.id.buts).setOnClickListener(this);<br> <br> chjTimer = new ChjTimer(this);<br> }<br> <br> @Override<br> public void onClick(View view) {<br> switch (view.getId()){<br> case R.id.but:<br> tiems.setText( "10" );<br> timnew.setText( "正在计时" );<br> chjTimer.start(10);<br> break ;<br> case R.id.buts:<br> chjTimer.stop();<br> break ;<br> }<br> }<br> <br> @Override<br> public void second(int time) {<br> tiems.setText(time + "" );<br> }<br> <br> @Override<br> public void expire() {<br> timnew.setText( "计时完成" );<br> }<br> <br> @Override<br> public void stop(int time) {<br> timnew.setText( "计时终止" + time);<br> }<br>} |
页面 布局
1 | <br><?xml version= "1.0" encoding= "utf-8" ?><br><LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" <br> xmlns:app= "http://schemas.android.com/apk/res-auto" <br> xmlns:tools= "http://schemas.android.com/tools" <br> android:orientation= "vertical" <br> android:layout_gravity= "center" <br> android:gravity= "center" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" <br> tools:context= ".MainActivity" ><br> <br> <TextView<br> android:id= "@+id/timnew" <br> android:layout_width= "wrap_content" <br> android:layout_height= "wrap_content" <br> android:text= "计时完成" <br> app:layout_constraintBottom_toBottomOf= "parent" <br> app:layout_constraintLeft_toLeftOf= "parent" <br> app:layout_constraintRight_toRightOf= "parent" <br> app:layout_constraintTop_toTopOf= "parent" /><br> <br> <TextView<br> android:id= "@+id/time" <br> android:text= "0" <br> android:layout_width= "wrap_content" <br> android:layout_height= "wrap_content" /><br> <br> <br> <Button<br> android:id= "@+id/but" <br> android:text= "开始" <br> android:layout_width= "wrap_content" <br> android:layout_height= "wrap_content" /><br> <br> <Button<br> android:id= "@+id/buts" <br> android:text= "终止" <br> android:layout_width= "wrap_content" <br> android:layout_height= "wrap_content" /><br> <br></LinearLayout> |
以上就是 直播app源码,定时开关,实现计时器功能,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现