实际效果可以参看微信的web页面进度条
本质就是通过addView及对WebView 页面进度进行监听
先看看这个自定义的DrawableId,我们参照系统默认实现的方法写一个自己的
 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
 
    <item android:id="@android:id/background"> //这个属性是指定progress的背景
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:startColor="#00000000"
                android:centerColor="#00000000"
                android:centerY="0.75"
                android:endColor="#00000000"
                android:angle="270"
                />
        </shape>
    </item>
 
 
    <item android:id="@android:id/progress"> //这个属性是指定progress的进度
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                    android:startColor="#ff7d1a"
                    android:centerColor="#ff7d1a"
                    android:centerY="0.75"
                    android:endColor="#ff7d1a"
                    android:angle="270"
                    />
            </shape>
        </clip>
    </item>
 
</layer-list>
实际还有一个secondProgress的属性,这个也随意设置,一般用不到
 
void init(Context context) {
        if (context == null)
            return;
        Drawable drawable = context.getResources().getDrawable(DrawableId);//该资源以系统原码为参照搞一个自己想要的角度颜色背景
        if (progressbar == null)
            progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);//这里必须要使用系统的attr属性才能正常实例化出来
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams
                (ViewGroup.LayoutParams.MATCH_PARENT, height);//用相对布局更方便指挥这个progress,这里随意;代码实现的height都为pix级别
        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);//这个位置是相对于添加它的父类View
        layoutParams.topMargin = 48;//该属性定义距离父类View顶部多少,pix级别
 
        if (progressbar != null) {
            progressbar.setLayoutParams(layoutParams);
            if (drawable != null) {
                progressbar.setProgressDrawable(drawable);//将我们自定义的drawable放进来,长相就定了
                progressbar.setIndeterminate(false);//此值表明进度是不明确的,我们并不知道具体进度是多少
            }
        }
        if (layoutParent == null)
            return;
        viewGroupParent.addView(progressbar);
        if (webView == null)
            return;
        webView.setWebChromeClient(new WebChromeClient());//给webview提供一个可以监听进度的对象,系统内的WebChromeClient 已经有了这个进度通知方法
    }
 
    public class WebChromeClient extends android.webkit.WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
 
 
            if (newProgress >= 99) {//这个临界值是用来改变显示状态,告诉我们页面加载完了,你progressbar可以隐藏了,此值随意,觉得多少合适就用多少
                if (progressbar != null)
                    progressbar.setVisibility(View.GONE);
            } else {
                final int progress = newProgress;//实际能避免新增对象就避免
                if (progressbar != null && progressbar.getVisibility() != View.VISIBLE)
                    progressbar.setVisibility(View.VISIBLE);
                if (weakHandler == null)
                    return;
                handler.post(new Runnable() {//handler的实际意图就是为了避免在非主线程改变UI,如果一定要在子线程改变Ui,记得给子线程一个Looper
                    @Override
                    public void run() {
                        if (progressbar != null) {
                            progressbar.setProgress(progress);
                            progressbar.incrementProgressBy(5);//平缓增加
                        }
                    }
                });
            }
            super.onProgressChanged(view, newProgress);
        }
 
    }

WebView增加一个水平Progress,位置、长相随意的更多相关文章

  1. 如何在属性面板中增加一个属性-UI界面编辑器(XproerUI)教程

    版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 开发文档(SkinStudio): ...

  2. echarts之简单的入门——【二】再增加一个柱状图和图例组件

    echarts之简单的入门——[一]做个带时间轴的柱状统计图 现在需求说,我需要知道日答题总次数和活跃人数,那么我们如何在上面的图表中增加一个柱状图呢? 如果你看过简单入门中的配置项手册中series ...

  3. Rails 增加一个模型(model)

      之前我们已经看到用脚手架运行的model程序.现在是时候第二个model了. 第二个model用来处理post的评论. 7.1 新建一个模型 Rails模型使用一个单一的的名称,其相应的数据库表使 ...

  4. 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...

  5. Add an Item to the New Action 在新建按钮中增加一个条目

    In this lesson, you will learn how to add an item to the New Action (NewObjectViewController.NewObje ...

  6. Numpy怎样给数组增加一个维度

    Numpy怎样给数组增加一个维度 背景:很多数据计算都是二维或三维的,对于一维的数据输入为了形状匹配,经常需升维变成二维 需要:在不改变数据的情况下,添加数组维度:(注意观察这个例子,维度变了,但数据 ...

  7. Vertica增加一个数据存储的目录

    Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...

  8. android源码中,在系统多媒体数据库中增加一个字段

    由于项目需求,在系统多媒体管理数据库里的存储图像文件的表中需要新增加一个字段,源码在:项目\packages\providers\MediaProvider\MediaProvider.java下,在 ...

  9. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

随机推荐

  1. gitHub入门指导

    Github可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性.为一个项目贡 ...

  2. C# Task的使用---Task的启动

    .NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能.任务表示应完成的某个单元的工作.这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一 ...

  3. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  4. yum downloadonly

         有些时候集群中的机器无法联网,通过yum进行安装,这样就需要找一个相同内核的机器将rpm下载后再到相应的机器上进行安装,以解决这一问题.      yum 有相应的工具完成这一任务.     ...

  5. 一起学习redis源码

    redis的一些介绍,麻烦阅读前面的几篇文章,想对redis的详细实现有所了解,强力推荐<redis设计与实现>(不仅仅从作者那儿学习到redis的实现,还有项目的管理.思想等,作者可能比 ...

  6. C#枚举硬件设备(升级版)

    原文:C#枚举硬件设备(升级版) 先取设备类型: ; } }

  7. Ubuntu LAMP搭建

    为了数据库课程设计,只好自己搭一个数据库系统,采用LAMP方式. 一.安装 1.安装Apache sudo apt-get install apache2 Apache在安装期间会新建一个目录:/va ...

  8. TCP建立连接的三次握手过程

    TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程. 上图画出了TCP建立连接的过程.假定主机A运行的是TCP客户程序,B运行的是TCP服务器程序.最初两端的TCP进 ...

  9. Fiddler如何抓取使用了SSL或TLS传输的Android App流量

    上篇文章介绍了Burpsuite如何抓取使用了SSL或TLS传输的Android App流量, 那么使用Fiddler的时候其实 也会出现与burpsuite同样的情况,解决方案同样是需要将Fiddl ...

  10. Myeclipse2014配置JSF环境

    首先创建一个普通的webproject,然后看官网教程喽 https://www.genuitec.com/products/myeclipse/learning-center/web/myeclip ...