Android 实现seekBar仿抖音拖动后改变thumb kotlin实现

news/2024/7/8 2:56:48

Android 实现seekBar仿抖音拖动后改变thumb kotlin实现

又是一个没被甲方采用的方案哈哈哈

抖音的进度条默认状态下是半透明的灰色,thumb是一个同样的灰色的圆
点击、拖动后,progress变为白色,高度变高,thumb变为圆角矩形,没有完全还原,感兴趣的朋友可以再完善一下

0.layout上放一个seekbar

  1. style设为水平
  2. max为进度条最大值
  3. 因为thumb会高于进度条一些,需要设为wrap_content,设置maxHeight和minHeight可以防止thumb显示不全
  4. 没有paddingEnd和paddingStart会导致进度条显示不全
  5. progress为当前进度
  6. progressDrawable为自定义的进度条样式,为xml文件
  7. thumb为自定义的样式,同为xml文件
<SeekBar
        android:id="@+id/sb_tiktok"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="720dp"
        android:max="100"
        android:maxHeight="4dp"
        android:minHeight="4dp"
        android:paddingEnd="2dp"
        android:paddingStart="2dp"
        android:progress="20"
        android:progressDrawable="@drawable/bkg_pro_tiktok"
        android:thumb="@drawable/tiktok_seek_thumb"
        android:thumbOffset="0dp"
        >
    </SeekBar>

1.自定义进度条样式bkg_pro_tiktok.xml

在drawable文件中创建
未播放进度,颜色grey为#212121
已播放的进度条,颜色white为#FFFFFFFF
四通道ARGB

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/background">
        <shape>
            <solid android:color="@color/grey"></solid>
        </shape>
    </item>
    <item android:id="@+id/progress">
        <clip>
            <shape>
                <solid android:color="@color/white"></solid>
            </shape>
        </clip>
    </item>
</layer-list>

2.自定义thumb样式tiktok_seek_thumb.xml

同样在drawable文件中创建,drawable用的都是我自己用figma画的svg图像,注意如果用png会很糊
最后一个item是默认状态下

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"
        android:state_window_focused="true"
        android:drawable="@drawable/thumb_tiktok_press1" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@drawable/thumb_tiktok_press1" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@drawable/thumb_tiktok_press1" />

    <item android:drawable="@drawable/thumb_tiktok" />

</selector>

thumb
thumb
thumb_press
thumb_press

3.activity代码中的设置

因为前面提到的maxHeight和minHeight的问题
为了拖动后放大进度条和完整的显示thumb,并在拖动结束后变回原来的高度,需要在代码中重写onProgressChanged函数,以下为Kotlin代码:
这两行代码放在onCreate中

	sb_tiktok = findViewById<SeekBar>(R.id.sb_tiktok)
    sb_tiktok.setOnSeekBarChangeListener(this)

重写函数放onCreat外面的后面

override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {

    }

    @RequiresApi(Build.VERSION_CODES.Q)
    override fun onStartTrackingTouch(p0: SeekBar?) {
        if (p0 != null) {
            p0.maxHeight = 30
            p0.minHeight = 30

        }
    }

    @RequiresApi(Build.VERSION_CODES.Q)
    override fun onStopTrackingTouch(p0: SeekBar?) {
        if (p0 != null) {
            p0.maxHeight = 8
            p0.minHeight = 8
        }
    }

有兴趣的朋友可以再完善一些,有问题可以在评论区问我


http://lihuaxi.xjx100.cn/news/31181.html

相关文章

微服务 Spring Boot 整合Redis分布式锁 实现优惠卷秒杀 一人一单

文章目录⛅前言一、集群环境下 秒杀 一人一单的并发问题二、什么是分布式锁&#xff1f;⛄基本原理和实现方式⚡Redis 分布式锁的核心实现思路三、实战开发 实现 Redis 分布式锁四、ApiFox 测试 集群模式下是否能够解决并发问题⛵小结⛅前言 在微服务 Spring Boot 整合Redis 实…

基于java高校新生报道及宿舍分配平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

基于java高校新生报道及宿舍分配平台计算机毕业设计源码系统lw文档mysql数据库调试部署 基于java高校新生报道及宿舍分配平台计算机毕业设计源码系统lw文档mysql数据库调试部署本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件…

Vmware16环境下NAT模式下CentOS7最小安装版, 设置静态IP 配置静态IP 固定IP

Vmware16环境下NAT模式下CentOS7最小安装版 设置固定静态IP 查看网关地址 默认网关可能不是1 , 比如可能是192.168.1.2 查看 VMware16的 NAT网络的 网关地址 点击打开菜单栏编辑按钮的下拉菜单 选虚拟网络编辑器 在弹出的窗口选 NAT模式的行, 使其变成蓝色 再点击 NAT设置…

15天深度复习JavaWeb的详细笔记(十二)——综合案例

文章目录demo12-综合案例1&#xff0c;功能介绍2&#xff0c;环境准备2.1 工程准备2.2 创建表3&#xff0c;查询所有功能3.1 后端实现3.1.1 dao方法实现3.1.2 service方法实现3.1.3 servlet实现3.1.4 测试后端程序3.2 前端实现4&#xff0c;添加功能4.1 后端实现4.1.1 dao方法实…

kubernetes -- Pod健康检查

目录 一、Pod探针基本概念 1、Pod状态 2、更准确的判断Pod状态 3、容器探针 4、检测结果 ​编辑 二、使用存活探针 1、存活探针案例 2、Liveness探针流程 3、查看存活探针信息 4、探针高级配置 5、探针高级配置 6、存活探针 - HTTP 7、存活探针 - TCP 三、使用就…

【vue设计与实现】双端Diff算法 2-非理想状况的处理方式

在前面&#xff0c;用的都是比较理想的例子。双端Diff算法的每一轮比较的过程都分为四个步骤。理想的情况是&#xff0c;每一轮比较都会命中四个步骤中的一个&#xff0c;但实际上&#xff0c;并不是所有情况都这么理想&#xff0c;例如下面这个例子 旧的一组子节点&#xff1…

【Vue】列表动画

学习内容&#xff1a; &#xff08;1&#xff09;学习Vue里面的状态动画 示例代码&#xff1a; 什么叫状态动画&#xff1f;我们举个例子&#xff0c;首先我这里定一个叫做number 这样的数据项&#xff0c;它的初始值是1&#xff0c;‍‍这块我也不需要这么多的内容了&#xf…

工程项目管理——第一章 软件项目管理概述

项目定义 项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力 项目的特征 有明确的目标项目之间的活动具有相关性限定的周期有独特性资源成本的约束性项目的不确定性 举例&#xff1a; 生活中的小项目&#xff1a;生日聚会、野餐活动、集体婚礼工作中…