前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-实现音乐模块的进度条

Android-实现音乐模块的进度条

原创
作者头像
Nimyears
发布2024-07-11 11:35:35
1200
发布2024-07-11 11:35:35

引言

在创建自定义进度条组件时,提供了两种方法:使用 Java 和 XML。以下是对这两种方法的详细说明和实战应用的整理,帮助大家更好理解如何编写和应用自定义进度条组件,非常重要,希望对你们有所帮助.

代码语言:javascript
复制
<com.spd.custom.view.ProgressBarLinearLayout
    android:id="@+id/music_widget_progress"
    android:layout_width="wrap_content"
    android:layout_height="4px"
    android:layout_marginLeft="-30px"
    custom:fillet_height="2"
    tools:ignore="PxUsage,RtlHardcoded" />
    

方法一:使用 Java 实现进度条的更新

首先定义函数名

然而创建 BitmapDrawable: 对象使用特定的图片资源(如进度条的填充和未填充部分),实现自定义视觉效果的进度条。

(1)编写绘制逻辑: 重写 onDraw 方法来绘制进度条,使用 Canvas 绘制背景和前景显示当前进度。

(2)或者绘制进度条:创建一个自定义的 View 类,用于绘制进度条

代码语言:java
复制

    //....    
    public ProgressBarLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        backgroundPaint.setColor(0xFFA5A5A5);  // 灰色背景
        backgroundPaint.setStyle(Paint.Style.FILL);

        progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        progressPaint.setColor(0xFF2196F3);  // 蓝色进度
        progressPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 绘制背景
        RectF backgroundRect = new RectF(0, 0, getWidth(), progressBarHeight);
        canvas.drawRect(backgroundRect, backgroundPaint);

        // 计算绘制当前进度
        float progressWidth = (getWidth() * currentProgress) / maxProgress;
        RectF progressRect = new RectF(0, 0, progressWidth, progressBarHeight);
        canvas.drawRect(progressRect, progressPaint);
    }

}

更新布局(onLayout):调用父类的onLayout方法;计算当前视图的新宽度和高度;如果新的宽度和高度与之前的值不同,更新视图的宽度和高度变量;更新进度条的左、右、上、下边界,以居中显示进度条;这些操作有助于在视图大小改变时,自动调整进度条的位置和大小,保持居中显示。

更新进度(setCurrentValue):提供一个方法来更新进度,每次更新后重新绘制进度条。

方法二:使用 XML 绘制静态进度条

  1. 创建一个 layer-list: 在 drawable 资源文件夹中创建一个 XML 文件定义进度条的样式。这个 layer-list 包含两层:一层是背景,另一层是前景(实际显示的进度)。
代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@android:id/background"
        android:height="10px"
        tools:ignore="UnusedAttribute">
        <shape android:shape="rectangle">
            <solid android:color="#A5A5A5" />
            <corners android:radius="10px" />
        </shape>
    </item>

    <item
        android:id="@android:id/progress"
        android:height="10px"
        tools:ignore="UnusedAttribute">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="#2196F3" />
                <corners android:radius="10px" />
            </shape>
        </clip>
    </item>
</layer-list>

XML预览图
XML预览图

所以直观看起来很简单对吧

预览效果
预览效果

实战应用

结尾

在实际应用中,根据应用场景选择使用 Java 还是 XML。例如,如果需要动态改变进度条颜色或响应用户交互,使用 Java 实现会更灵活。如果只需要简单展示进度,且样式不变,使用 XML 可以简化开发。

谢谢大家的阅读:)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:使用 Java 实现进度条的更新
  • 方法二:使用 XML 绘制静态进度条
  • 实战应用
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档