直播系统平台搭建,大屏倒计时动画效果

直播系统平台搭建,大屏倒计时动画效果实现的相关代码

第一步:制作圆形背景图

在android中,我们会用shape定义各种各样的形状,它能实现渐变色、虚线/分割线、边框、半透明、半透明阴影效果。圆形背景图为矢量图,先上代码:

 

1
<?xml version="1.0" encoding="UTF-8"?><br><shape xmlns:android="http://schemas.android.com/apk/res/android"<br>    android:shape="oval"><br>    <solid android:color="@color/white" /><br>    <stroke<br>        android:width="4dp"<br>        android:color="@color/white" /><br>    <padding<br>        android:top="1dp"<br>        android:left="2dp"<br>        android:right="2dp"<br>        android:bottom="1dp"/><br>    <size<br>        android:width="20dp"<br>        android:height="20dp" /><br></shape>

​解释

solid 实心填充颜色,十六进制颜色值,这里设置了60%半透明度白色的效果

stroke 描边,外边框,可以设置颜色和宽度.同时,该属性也可以用来画虚线,通过设置dashGap和dashWidth两个属性控制虚线间隔和长度

padding 内容距离边框的值

size 指定大小,shape为oval模式时,width和height相等时,代表正圆,否则de为椭圆

第二步:规划布局文件,设置TextView的背景

按照文初看到的效果图,布局文件中需要有一个可点击的Button,和一个可以变更数字的TextView。

 

首先,隐藏TextView的显示,只显示一个“倒计时开始”的Button。

点击“倒计时开始”后,将Button隐藏,将TextView显示出来。

代码罗列如下:

 

1
<br><?xml version="1.0" encoding="utf-8"?><br><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br>  xmlns:tools="http://schemas.android.com/tools"<br>  android:layout_width="match_parent"<br>  android:layout_height="match_parent"<br>  android:background="@color/gray"<br>  android:gravity="center"<br>  tools:context="com.example.server.testapplication.MainActivity"><br> <br>  <TextView<br>      android:id="@+id/count_text"<br>      android:layout_width="350dp"<br>      android:layout_height="350dp"<br>      android:background="@drawable/circle"<br>      android:gravity="center"<br>      android:textColor="@color/black"<br>      android:textSize="240sp"<br>      android:visibility="gone" /><br> <br>  <Button<br>      android:id="@+id/count_button"<br>      android:layout_width="wrap_content"<br>      android:layout_height="wrap_content"<br>      android:gravity="center"<br>      android:text="倒计时开始..." /><br></RelativeLayout>

 

第三步:实现代码逻辑,用Handler实现动态更新TextView内容

初始化控件

设置Button的监听方式为内部类监听,原理是通过子线程发送消息,在主线程中更新UI。

定义Handler内部类用于接收并处理来自子线程的消息,并判断当前的count值若大于0,继续延时发送消息,直到数字变为0.

 

1
package com.example.server.testapplication;<br> <br>import android.app.Activity;<br>import android.os.Bundle;<br>import android.os.Handler;<br>import android.os.Message;<br>import android.view.View;<br>import android.widget.Button;<br>import android.widget.TextView;<br> <br>public class MainActivity extends Activity {<br>    private static final int START_COUNTING = 1;<br>    private static final int COUNT_NUMBER = 10;<br> <br>    private Button mCountDown;<br>    private TextView mStartCount;<br>    private MyHandler mHandler = new MyHandler();<br>    private ButtonListener mButtonListener = new ButtonListener();<br> <br>    @Override<br>    protected void onCreate(Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.activity_main);<br>        init();<br>    }<br> <br>    private void init() {<br>        mCountDown = (Button) findViewById(R.id.count_button);<br>        mCountDown.setOnClickListener(mButtonListener);<br>        mStartCount = (TextView) findViewById(R.id.count_text);<br>    }<br> <br>    private class ButtonListener implements View.OnClickListener {<br> <br>        @Override<br>        public void onClick(View v) {<br>            mCountDown.setVisibility(View.GONE);<br>            mStartCount.setVisibility(View.VISIBLE);<br> <br>            Message msg = mHandler.obtainMessage();<br>            msg.what = START_COUNTING;<br>            msg.obj = COUNT_NUMBER;<br>            mHandler.sendMessageDelayed(msg, 10);<br>        }<br>    }<br> <br>    private class MyHandler extends Handler {<br>        @Override<br>        public void handleMessage(Message msg) {<br>            super.handleMessage(msg);<br> <br>            switch (msg.what) {<br>                case START_COUNTING:<br>                    int count = (int) msg.obj;<br>                    mStartCount.setText(count + "");<br>                    if (count > 0) {<br>                        Message msg1 = obtainMessage();<br>                        msg1.what = START_COUNTING;<br>                        msg1.obj = count - 1;<br>                        sendMessageDelayed(msg1, 500);<br>                    }<br>                    break;<br> <br>                default:<br>                    break;<br>            }<br>        }<br>    };<br> <br>}

 

以上就是 直播系统平台搭建,大屏倒计时动画效果实现的相关代码,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(249)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示