跳到正文

自定义 ​

每个加载动画都支持同样四类设置:参数(params)、颜色(color)、多色(colors) 和尺寸。先在下面试一试,再复制对应平台的代码。

Params
3
0.30
颜色
1.00×
64px
import { LoaderKit } from '@loader-kit/web/react';

<LoaderKit
  indicator="BallPulse"
  size={64}
/>

参数 ​

有些加载动画声明了参数,也就是带默认值的具名数字。BallPulse 有 count(3)和 minScale(0.3)。只需传入想修改的值,其余的保持默认。

html
<loader-kit indicator="BallPulse" params='{"count": 5, "minScale": 0.5}'></loader-kit>
ts
const view = new LoaderKitView(host, {
  indicator: 'BallPulse',
  params: { count: 5, minScale: 0.5 },
});
kotlin
loader.indicator = "BallPulse"
loader.params = mapOf("count" to 5.0, "minScale" to 0.5)
kotlin
LoaderKitIndicator(
    indicator = "BallPulse",
    params = mapOf("count" to 5.0, "minScale" to 0.5),
)
swift
let loader = LoaderKitView(indicator: "BallPulse")
loader.params = ["count": 5, "minScale": 0.5]
swift
LoaderKitIndicator("BallPulse", params: ["count": 5, "minScale": 0.5])
csharp
indicator.Indicator = "BallPulse";
indicator.Params = new Dictionary<string, double> { ["count"] = 5, ["minScale"] = 0.5 };

以下规则在所有平台上都一样:

  • 加载动画没有声明的参数名会被忽略。切换加载动画时可以保留同一组参数。
  • 数量类参数会四舍五入取整,且最小为 1。
  • 参数值不做范围检查。尺寸、数量和线宽请保持为正数:超出范围的值会画成什么样,规范没有规定。
  • 修改参数会让动画回到周期开头重新播放。

参数列表见内置加载动画;想在自己的 spec 里声明参数,见参数。

颜色 ​

一种颜色绘制所有元素。opacity track 会乘到这个颜色的 alpha 上。

html
<loader-kit indicator="BallPulse" color="#10b981"></loader-kit>

<!-- 不设置 color 属性时,使用元素的 CSS color -->
<loader-kit indicator="BallPulse" style="color: var(--brand)"></loader-kit>
ts
view.color = '#10b981';   // 任意 CSS 颜色;null 表示 currentColor
xml
<io.github.maitrungduc1410.loaderkit.LoaderKitView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:indicatorColor="?attr/colorPrimary" />
kotlin
loader.color = Color.MAGENTA
kotlin
LoaderKitIndicator("BallPulse", color = MaterialTheme.colorScheme.primary)
swift
loader.color = .systemBlue
swift
LoaderKitIndicator("BallPulse").color(.accentColor)
xml
<lk:LoaderKitIndicator Indicator="BallPulse" Color="MediumSeaGreen" />

默认颜色:

平台默认值
Web宿主元素的 CSS color(currentColor)
Android View主题属性 android:colorForeground
Compose黑色,系统开启深色模式时为白色
iOS、macOSsystemGray
Windows白色

在 Apple 平台上,.label 这类动态系统颜色会自动适配浅色和深色外观。

多色 ​

colors 为每个元素单独指定颜色。元素 i 使用 colors[i mod colors.length],所以列表比元素少时会循环使用。只要设置了 colors 且不为空,它就优先于 color。

html
<loader-kit indicator="BallPulse" colors="#f43f5e, #f59e0b, #10b981"></loader-kit>
ts
view.colors = ['#f43f5e', '#f59e0b', '#10b981'];
kotlin
loader.colors = intArrayOf(Color.RED, Color.YELLOW, Color.GREEN)
kotlin
LoaderKitIndicator("BallPulse", colors = listOf(Color.Red, Color.Yellow, Color.Green))
swift
loader.colors = [.systemRed, .systemOrange, .systemGreen]
swift
LoaderKitIndicator("BallPulse").colors([.red, .orange, .green])
csharp
indicator.Colors = new[] { Colors.Tomato, Colors.Gold, Colors.MediumSeaGreen };

元素顺序

元素按绘制顺序编号:一行时从左到右,网格逐行编号,圆环从右侧开始顺时针编号。如果加载动画由多个部件组成,编号会接着上一个部件继续往下排。

尺寸 ​

按各平台惯常的方式设置视图尺寸即可。加载动画会画在能放下的最大正方形里并居中,所以永远不会被拉伸。不设置尺寸时,视图为 40 × 40。

html
<loader-kit indicator="BallPulse" style="width: 64px; height: 64px"></loader-kit>
xml
<io.github.maitrungduc1410.loaderkit.LoaderKitView
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:padding="8dp"
    app:indicator="BallPulse" />
kotlin
LoaderKitIndicator("BallPulse", Modifier.size(64.dp))
swift
loader.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    loader.widthAnchor.constraint(equalToConstant: 64),
    loader.heightAnchor.constraint(equalToConstant: 64),
])
swift
LoaderKitIndicator("BallPulse").frame(width: 64, height: 64)
xml
<lk:LoaderKitIndicator Indicator="BallPulse" Width="64" Height="64" />

在 Android 上,加载动画画在 padding 以内。在 SwiftUI 中,要先调用 LoaderKit 的修饰符(color、speed 等),再调用 frame 这类 SwiftUI 修饰符。

修改颜色或尺寸不会让动画重新开始。

基于 MIT 许可证发布。