Android花样loading进度条(一)-水平的网页加载进度条

背景

Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平、圆形、环形、圆弧形、不规则形状等。
本篇我们从水平进度条讲起,主要是ProgressBar的水平样式应用。

进度条控件

Android提供的ProgressBar控件有水平、圆形两种形态,套用不同的主题可以实现不同的大小,基本上美观一点的设计在实现的时候都需要自定义ProgressBar样式。
这里讲水平ProgressBar的样式更换方法。

进度条样式自定义

progressDrawable属性可为ProgressBar更换指定绘图方式。适合网页加载提示的进度条样式效果为:
进度条效果图
(图中红色条为进度指示条,红色背后的白色为背景色)
为此,我们写了pro_webview.xml作为progressDrawable引用的文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 背景 -->
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="@color/white" />
        </shape>
    </item>
    <!-- 第二进度条颜色 -->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="@color/white" />
            </shape>
        </clip>
    </item>
    <!-- 进度条 -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <solid android:color="@color/red_web" />
            </shape>
        </clip>
    </item>
</layer-list>

作几点说明:

  • @android:id/background:其对应的item表示进度条的背景色。
  • @android:id/secondaryProgress:其对应的item为第二进度条,一般表示缓冲进度条,比如音视频在播放的时候会缓冲数据,缓冲表示数据加载效果,而播放过程则使用第一进度条来显示了。第二进度条在网页加载中用不到,所以就设成白色了,和背景色一样。
  • @android:id/progress:其对应的item为进度指示条,可以理解为第一进度条,网页加载的进度在这里使用红色表示。
  • 因为进度条是随着加载情况可以动态变化的,所progress、secondaryProgress的样式设置不能使用单纯的color或shape,需要用到clip标签,因为ClipDrawable可以很好地裁剪显示(这块是Android控件实现上的事情了,开发者不用管)。

配置进度条属性

将pro_webview.xml中设置的进度样式应用到ProgressBar属性中,代码如下:

<ProgressBar
        android:id="@+id/pro_webview"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="4dip"
        android:max="100"
        android:progress="0"
        android:progressDrawable="@drawable/pro_webview"
        android:secondaryProgress="0" />

就可以在代码中使用设置好的ProgressBar来显示加载效果了。

与WebView结合

WebView在加载网页时候有接口可以计算出进度,通过不断更新ProgressBar的进度值,达到进度条随网页内容加载而动态变化的效果。动画如下:
网页加载效果
更新ProgressBar的进度值的代码:

...
webView.setWebChromeClient(webChromeClient);
...

 // 获取加载进度
 private WebChromeClient webChromeClient = new WebChromeClient() {
     @Override
     public void onProgressChanged(WebView view, int newProgress) {
         if (newProgress == 100) {
             proWebView.setVisibility(View.GONE);
         } else {
             if (proWebView.getVisibility() == View.GONE) {
                 proWebView.setVisibility(View.VISIBLE);
             }
             proWebView.setProgress(newProgress);
         }
         super.onProgressChanged(view, newProgress);
     }
 };

通过监听网页加载newProgress来判断是否显示进度条,当达到100时隐藏进度条,未达到100时,更新进度条的指示值就可以了。

总结

本篇从比较简单的水平网页加载进度条入手,讲解水平进度条的使用和样式修改方法。用到的进度条ProgressBar为Android原生的控件,后续的文章将从自定义控件的角度使用Canvas来绘制进度。

源码下载

https://github.com/ahuyangdong/ColorfulLoading

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的用Phaser.6写loading进度条的示例代码: ```javascript // 创建Phaser游戏实例 const game = new Phaser.Game({ type: Phaser.AUTO, width: 800, height: 600, scene: { preload: preload, create: create, update: update } }); // 加载进度条相关的资源 function preload() { this.load.image('loading-bar', 'assets/loading-bar.png'); } // 创建loading进度条 function create() { // 添加背景 this.add.rectangle(0, 0, game.config.width, game.config.height, 0x000000).setOrigin(0); // 添加loading图标 const loadingBar = this.add.image(game.config.width / 2, game.config.height / 2, 'loading-bar'); // 创建loading进度条 const progressBar = this.add.graphics(); const progressBox = this.add.graphics(); progressBox.fillStyle(0x222222, 0.8); progressBox.fillRect(game.config.width / 2 - 160, game.config.height / 2 - 25, 320, 50); // 监听加载进度事件,更新进度条 this.load.on('progress', function (value) { progressBar.clear(); progressBar.fillStyle(0xffffff, 1); progressBar.fillRect(game.config.width / 2 - 150, game.config.height / 2 - 15, 300 * value, 30); }); // 监听加载完成事件,跳转到游戏场景 this.load.on('complete', function () { // TODO: 跳转到游戏场景 }); } function update() {} ``` 在上述代码中,我们首先在preload函数中加载了一个loading-bar.png图片作为loading图标的素材,然后在create函数中创建了一个loading-bar精灵,并且用add.graphics()函数创建了一个进度条的背景和进度条本身,最后监听了Phaser的load.on('progress')事件,实时更新进度条的宽度,同时也监听了load.on('complete')事件,在所有资源加载完成后跳转到游戏场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值