Android开发仿抖音底部加载进度条

news2024/9/29 13:44:06
Android开发仿抖音底部加载进度条

仿抖音底部加载进度条,从中间向两头伸的动画

一、思路:

自定义VideoLoadingBar控件

二、效果图:

在这里插入图片描述

三、关键代码:
// 联系:893151960
public class VideoLoadingBar extends View {

    private int mWidth;
    private RectF mBgRectF;
    private Paint mBgPaint;
    private Paint mFgPaint;
    private RectF mFgRectF;
    private float mRate;
    private boolean mLoading;
    private int mBgColor;//背景色
    private int mFgColor;//前景色

    public VideoLoadingBar(Context context) {
        this(context, null);
    }

    public VideoLoadingBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public VideoLoadingBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.LoadingBar);
        mBgColor = ta.getColor(R.styleable.LoadingBar_lb_bg_color, 0xff000000);
        mFgColor = ta.getColor(R.styleable.LoadingBar_lb_fg_color, 0xffffffff);
        ta.recycle();
        initPaint();
    }

    private void initPaint() {
        mBgPaint = new Paint();
        mBgPaint.setAntiAlias(true);
        mBgPaint.setDither(true);
        mBgPaint.setColor(mBgColor);
        mBgPaint.setStyle(Paint.Style.FILL);
        mBgRectF = new RectF();

        mFgPaint = new Paint();
        mFgPaint.setAntiAlias(true);
        mFgPaint.setDither(true);
        mFgPaint.setColor(mFgColor);
        mFgPaint.setStyle(Paint.Style.FILL);
        mFgRectF = new RectF();
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        mWidth = getMeasuredWidth();
        int height = getMeasuredHeight();
        mBgRectF.top = 0;
        mBgRectF.bottom = height;
        mFgRectF.top = 0;
        mFgRectF.bottom = height;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        mBgRectF.left = 0;
        mBgRectF.right = mWidth;
        canvas.drawRect(mBgRectF, mBgPaint);
        if (mLoading) {
            if (mRate > 1) {
                mRate = 1;
            }
            float barWidth = mRate * mWidth;
            float left = (mWidth - barWidth) / 2;
            mFgRectF.left = left;
            mFgRectF.right = left + barWidth;
            canvas.drawRect(mFgRectF, mFgPaint);
            if (mRate < 1) {
                mRate += 0.1f;
                postInvalidateDelayed(20);
            } else {
                mRate = 0;
                postInvalidateDelayed(150);
            }
        }
    }

四、项目demo源码结构图:

在这里插入图片描述有问题或者需要完整源码的私信我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿布量化:基于 Python 的量化交易框架

阿布量化&#xff08;AbuQuant&#xff09; 是一个开源的量化交易框架&#xff0c;专为金融领域的研究者和交易者设计。它基于 Python 语言开发&#xff0c;提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…

IDEA:Picked up _JAVA_OPTIONS: -Xmx512M

_JAVA_OPTIONS 是一个环境变量&#xff0c;它可以用来设置 Java 虚拟机的启动参数 如果要取消它在idea中显示&#xff0c;如图所示将其删除即可

C# 游戏引擎中的协程

前言 书接上回&#xff0c;我谈到了Unity中的协程的重要性&#xff0c;虽然协程不是游戏开发“必要的”&#xff0c;但是它可以在很多地方发挥优势。 为了在Godot找回熟悉的Unity协程开发手感&#xff0c;不得不自己做一个协程系统&#xff0c;幸运的是&#xff0c;有了Unity的…

MongoDB 工具包安装(mongodb-database-tools)

首先到官网下载工具包&#xff0c;进入下面页面&#xff0c;复制连接地址&#xff0c;使用wget下载 cd /usr/local/mongodb5.0.14/wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.6.1.tgz 安装 tar -zxvf mongodb-database-tools-rhel70-…

26个用好AI大模型的提示词技巧

如果你已深入探索过ChatGPT、Microsoft Copilot、风变AI等前沿的生成式AI工具&#xff0c;那么你对“prompt”&#xff08;提示词&#xff09;这一核心概念一定有自己的认知。 作为连接你与AI创意源泉的桥梁&#xff0c;“prompt”不仅是触发无限想象的钥匙&#xff0c;更是塑…

基于SSM的校园自助洗衣系统【附源码】

基于SSM的校园自助洗衣系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 第5章 系统实现 5.1 管理员功能实现 5.1.1 洗衣机管理…

远程服务器安装anaconda并创建虚拟环境

1、承接上文新用户zrcs&#xff0c;在服务器的zrcs文件夹下直接下载anaconda&#xff08;很慢&#xff09;&#xff1a; wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh 或者选择本地下载&#xff0c;清华大学开源软件镜像站&#xff1a;https:/…

ACDsee简体中文版网盘资源下载(含教程)

如大家所熟悉的&#xff0c;ACDSee是一款集看图、编辑和管理于一体的软件&#xff0c;其凭借着打开速度快、管理功能强、操作界面友好简单等等优势&#xff0c;广受用户的喜欢。目前最新为ACDSee 2024版本。 一、文件管理 ACDSee数据库在文件管理方面表现出色。它可以帮助用户…

vscode编辑区看不清光标

打开 “控制面板”-“鼠标”-“指针”-“自定义”-“文本选择” 在浏览中选择“beam_r.cur”&#xff0c;打开后确认应用

GIS开发工程师岗位职责、技术要求和常见面试题

GIS 开发工程师负责运用地理信息系统专业知识和编程技能&#xff0c;进行 GIS 软件设计、开发、数据处理与管理&#xff0c;以实现高效的地理空间信息系统应用。 一、岗位职责 系统开发与设计 负责地理信息系统&#xff08;GIS&#xff09;相关软件的设计、开发、测试和维护工…

智能绘画,体现非凡想象力以文生图功能简单操作

智能绘画&#xff0c;体现非凡想象力以文生图功能简单操作 智能绘画技术突破了人类自身的极限&#xff0c;让绘画分析进入到一个更为广泛的视野中。通过输入描述性的文字&#xff0c;便可生成便可生成同一主题、不同风格的画作&#xff0c;体现出非凡的想象力&#xff0c;象征未…

【网络安全 白帽子】用技术合法挖漏洞,一个月能拿多少钱

现在很多白帽子&#xff08;网安工程师/渗透测试工程师&#xff09;都会在下班之后利用业余时间去补天之类的漏洞赏金平台挖漏洞&#xff0c;用技术合法给企业找出威胁存在&#xff0c;拿到漏洞赏金。 那么现在&#xff0c;一般人用网安技术挖漏洞一个月能拿多少钱&#xff1f…

【Mybatis Plus】分页插件

1.配置分页插件 Configuration public class MyBatisConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();//1.创建分页插件PaginationInnerInterceptor paginationInnerInterceptor new…

Unity实战案例全解析:RTS游戏的框选和阵型功能(2) 生成选择框

前篇&#xff1a;Unity实战案例全解析&#xff1a;RTS游戏的框选和阵型功能&#xff08;1&#xff09; 基础要素-CSDN博客 本案例来源于unity唐老狮&#xff0c;有兴趣的小伙伴可以去泰克在线观看该课程 【唐老狮】Unity实现 即时战略游戏 阵型功能 - 泰课在线 -- 志存高远&…

深刻理解Redis集群(上):RDB快照和AOF日志

RDB快照 save同步阻塞 客户端 服务端 .conf配置文件 # The filename where to dump the DB dbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项&#xff0c;它的作用是在主节点上执行BGSAVE或AOF持久化操作时&#xff0c;删除同步锁文件&#xff0c;以释放磁…

结婚证识别-离婚证识别接口-结婚证识别API应用场景

在信息化与智能化高速发展的今天&#xff0c;证件的自动识别技术逐渐成为了各行各业数字化转型的关键工具&#xff0c;而结婚证识别接口、离婚证识别接口正在悄然改变着传统的民政工作方式。 结婚证识别与离婚证识别接口是基于光学字符识别&#xff08;OCR&#xff09;技术的智…

LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142629289 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 RAG (R…

短视频矩阵系统源码部署开发分享

在当今的软件开发领域&#xff0c;框架技术扮演了极为关键的角色&#xff0c;特别是Java开发中的Spring、Struts和Hibernate三大框架。这些框架各具特色&#xff0c;为开发者提供了强大的工具来构建高效、稳定的应用程序。 Spring框架&#xff0c;以其全面的依赖注入&#xff0…

C语言自定义类型:枚举

目录 前言枚举类型1.枚举类型的声明2.枚举类型的优点3.枚举类型的使⽤ 总结 前言 这期我们来学习C语言的最后一个自定义类型——枚举&#xff0c;话不多说&#xff0c;正文开始&#xff1a; 枚举类型 1.枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。 …

Arthas stack (输出当前方法被调用的调用路径)

文章目录 二、命令列表2.3 monitor/watch/trace/stack/tt 相关2.3.2 stack &#xff08;输出当前方法被调用的调用路径&#xff09;举例1&#xff1a;输出当前方法被调用的调用路径&#xff0c;入口很多从哪调用的&#xff1f; 二、命令列表 2.3 monitor/watch/trace/stack/tt…