TangIDE开发技巧之自定义资源加载窗口进度条

用TangIDE开发游戏的朋友都知道,你可以像编辑普通的窗口一样编辑资源加载窗口,加入各种丰富的控件和动画效果,但是进度条相对比较单调,现在进度条默认是两张小图,加载时按九宫格来绘制,如果你不想用九宫格,想用两张水平长图替代它们,那么你可以在资源加载窗口的onSystemInit事件下,重写进度条控件(UIProgressBar)的drawBgImageH方法(这里的H表示水平形状的进度条),改变图片的绘制方式。

var me = this;
var win = this.getWindow();
//显示对象
win.find("资源加载进度条").drawBgImageH = function(canvas) {
    var image = null;
    var h = this.h >> 1;
    var y = (this.h - h)>> 1;
    var r = this.roundRadius ? this.roundRadius : 0;

    image = this.getHtmlImageByType(UIElement.IMAGE_DEFAULT);
    if(image) {
        canvas.drawImage(image, 0, 0, image.width, image.height, 0, 0, this.w, image.height);
    }
    else {
        canvas.beginPath();
        canvas.translate(0, y);
        drawRoundRect(canvas, this.w, h, r);
        canvas.translate(0, -y);
        canvas.fillStyle = this.style.fillColor;
        canvas.fill();
    }

    var fgImage = this.getHtmlImageByType(UIElement.IMAGE_NORMAL_FG);
    if(image) {
        y = Math.abs(fgImage.height - image.height) >> 1;
        canvas.drawImage(fgImage, 0, 0, Math.round(fgImage.width * this.value), fgImage.height, 0, y, Math.round(this.w * this.value), fgImage.height);
    }
    else {
        if(w > 2 * r) {
            canvas.beginPath();
            canvas.translate(0, y);
            drawRoundRect(canvas, w, h, r);
            canvas.fillStyle = this.style.lineColor;
            canvas.fill();
        }
    }

    return;
}

对比原始的drawBgImageH方法可能看的更清楚

UIProgressBar.prototype.drawBgImageH = function(canvas) {
    var image = null;
    var h = this.h >> 1;
    var y = (this.h - h)>> 1;
    var r = this.roundRadius ? this.roundRadius : 0;

    image = this.getHtmlImageByType(UIElement.IMAGE_DEFAULT);
    if(image) {
        drawNinePatchEx(canvas, image, 0, 0, image.width, image.height, 0, y, this.w, h);
    }
    else {
        canvas.beginPath();
        canvas.translate(0, y);
        drawRoundRect(canvas, this.w, h, r);
        canvas.translate(0, -y);
        canvas.fillStyle = this.style.fillColor;
        canvas.fill();
    }

    var w = Math.round(this.w * this.value);
    image = this.getHtmlImageByType(UIElement.IMAGE_NORMAL_FG);
    if(image) {
        drawNinePatchEx(canvas, image, 0, 0, image.width, image.height, 0, y, w, h);
    }
    else {
        if(w > 2 * r) {
            canvas.beginPath();
            canvas.translate(0, y);
            drawRoundRect(canvas, w, h, r);
            canvas.fillStyle = this.style.lineColor;
            canvas.fill();
        }
    }

    return;
}
时间: 2024-10-10 20:38:17

TangIDE开发技巧之自定义资源加载窗口进度条的相关文章

Andriod开发技巧——Fragment的懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里.请看关于Fragment里这个方法的API文档(国内镜像地址:ht

iOS 图片加载 圆形进度条

项目中有加载网络图片的需求,加一个加载的进度条会提高用户体验,网络不好的时候会清晰的看到图片加载的进度,比让用户看着满屏幕空白好.下面是我们项目自己封装的圆形进度条,分享给大家. 其实实现原理很简单,只是根据图片加载的进度来绘制一个圆. 先来看.h文件,需要一个进度的属性和进度条展示位置的方法: @property (nonatomic, assign) CGFloat progress; +(HMProgressView *)showHMProgressView:(UIView *)paren

cocos2dx 3.x(加载cocostudio进度条)

1 // 2 // MyLoagingScene.hpp 3 // My 4 // 5 // Created by work on 16/10/13. 6 // 7 // 8 9 #ifndef MyLoagingScene_hpp 10 #define MyLoagingScene_hpp 11 12 #include <stdio.h> 13 #include "cocos2d.h" 14 #include <editor-support/cocostudio/C

WPF BackGroundWord 异步加载更新进度条示例

1 <Window x:Class="AsynchronousLoading.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/e

【笔记】canvas图片预加载及进度条的实现

/*star *loading模块 *实现图片的预加载,并显示进度条 *参数:图片数组对象,加载完成的回调函数 */ function loadImages(sources,callback){ var loadedImages = 0; var numImages = 0; ctx.font='14px bold'; ctx.lineWidth=5; var clearWidth=canvas.width; var clearHeight=canvas.height; // get num o

VS2015 Cordova实现WebView加载页面进度条(Android)

因为使用Cordova做app时,加载页面没有进度条,用户无法感知打开进度,故加入进度条,具体实现如下: 1.  如果项目没有生成过apk,需先生成一次,这样在项目下面才会出现platforms/android的文件夹. 2.  进入项目/platforms/android/src文件夹下,在你程序包名目录下找到你的MainActivity.java文件,增加一个Dialog和ProgressBar用来显示页面加载进度,具体代码实现如下: 1 /* 2 Licensed to the Apach

js 多张图片加载 环形进度条

css 部分使用 svg 绘制环形 1 svg{width:100px; height: 100px; margin:15% auto 25%; box-sizing:border-box; display: block;} 2 svg circle{fill:none;cx:50;cy:50;} 3 /* svg text{x:40;y:55;} 不起作用 原因不知*/ 4 svg #txt{ x:35;y:55%;fill:red;} 5 svg #backdrop{stroke-linec

6款绚丽的js加载和进度条插件

google%E5%BC%80%E6%BA%90materialdesign%E5%9B%BE%E6%A0%87 http://www.zcool.com.cn/collection/ZMTY4OTU2OTI=.html http://www.zcool.com.cn/collection/ZMTY5NzIwNjA http://www.zcool.com.cn/collection/ZMTcwOTEwNDQ?20170922 http://www.zcool.com.cn/collection

chromium网络资源加载分析(一) 主资源加载逻辑分析

最近花了点时间看了看chromium加载网页的逻辑.由于这段内容较为复杂,现在只看了一部分.现将主资源的加载记录下来. 注:下面提到的文件,如果没有指明目录,则在third_party/WebKit目录下 1. ContentViewCore执行loadUrl之后,经过一些逻辑(这些逻辑比较简单,这里不做介绍),最终会走到:render_frame_impl.cc的方法:RenderFrameImpl::OnNavigate 该方法中,有代码:frame->loadRequest(request