直播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源码,定时开关,实现计时器功能,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(139)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示