Android改变进度条控件progressbar的样式(根据源码修改)

1,493 阅读1分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

系列文章目录

Android改变进度条控件progressbar的样式(根据源码修改)


前言

网上有一大堆的改变progressbar样式的方法,最开始博主是直接用自定义view实现的(旋转动画),后来发现可以根据Android源码来改—>sdk,实现的代码比较简单,但是为什么这么改还是要解释一下:下面来看一下Android源码中是怎么定义progressbar的样式的。

先看看效果图:

Video_20210827_071954_911.gif


根据Android官方文档。系统提供的其他进度条样式包括:

  • Widget.ProgressBar.Horizontal
  • Widget.ProgressBar.Small
  • Widget.ProgressBar.Large
  • Widget.ProgressBar.Inverse
  • Widget.ProgressBar.Small.Inverse
  • Widget.ProgressBar.Large.Inverse

以Widget.ProgressBar.Large为例。

一、style文件中定义的Widget.ProgressBar.Large样式。

    <style name="Widget.ProgressBar.Large">
        <item name="indeterminateDrawable">@drawable/progress_large_white</item>
        <item name="minWidth">76dip</item>
        <item name="maxWidth">76dip</item>
        <item name="minHeight">76dip</item>
        <item name="maxHeight">76dip</item>
    </style>

可以明显看到除去大小的定义外,主要是progress_large_white。

二、progress_large_white.xml

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_white_76"
    android:pivotX="50%"
    android:pivotY="50%"
    android:framesCount="12"
    android:frameDuration="100" />
  • android:pivotX:表示缩放/旋转起点 X 轴坐标。
  • android:pivotY:表示缩放/旋转起点 Y 轴坐标。

可以明显看到引用的是spinner_white_76图片。

三、spinner_white_76图片样式如下(红框内)

20190827150348564.png

按照逻辑将此图片改成直接想要的图片即可。

四、 实现

那么既然源码中能这么定义,我们开发者当然也能(操作分成两部)。

  • 第一步:模仿源码定义一个旋转动画的xml文件,将图片改成自己想要的样子(一般动画文件应该放在anim文件夹中,但是SDK中是默认放在drawable文件中的,所以博主还是放在drawable文件中使用)。
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/loading"
    android:pivotX="50%"
    android:pivotY="50%"
 />
  • 第二步:在要显示在UI界面的控件中将这个动画添加进去:—>indeterminateDrawable。
    <ProgressBar
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:indeterminateDrawable="@drawable/progress_large_white"
    />

在使用时,当数据加载完成后,将ProgressBar隐藏即可。