Android-做个性化的进度条

 1.案例效果图

progress[1]

2.准备素材

   image

          progress1                               progress2

progress1.png(78*78)              progress2.png(78*78)

3.原理

采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时:进度图片逐步显示,背景图片逐步隐藏,达到上面的效果。

4.灵感来自Android控件提供的源码

4.1 默认带进度的进度条,如下图

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <ProgressBar  
  2.    android:id="@+id/progressBar2"  
  3.    style="@android:style/Widget.ProgressBar.Horizontal"  
  4.    android:layout_width="268dp"  
  5.     android:layout_height="wrap_content"  
  6.    android:progress="45" />   
 <ProgressBarandroid:id="@+id/progressBar2"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="268dp"android:layout_height="wrap_content"android:progress="45" /> 

image

注意:关键是style属性在起作用

4.2 找到样式定义的位置

     鼠标放在style属性值上,按下Ctrl键,出现超链接,点击超链接跳转到样式的定义位置

          image

     样式定义的内容如下         

image

重点研究:

android:progressDrawable:进度条的样式

@android:drawable/progress_horizontal:样式定义的文件

在android-sdk-windows\platforms\android-14\data\res目下搜索progress_horizontal.xml文件,搜索结果如下:

    image

打开progress_horizontal.xml文件,内容如下

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <layer-listxmlns:androidlayer-listxmlns:android="http://schemas.android.com/apk/res/android">     
  2.      <itemandroid:iditemandroid:id="@android:id/background">  
  3.         <shape>  
  4.              <cornersandroid:radiuscornersandroid:radius="5dip"/>  
  5.              <gradient  
  6.                      android:startColor="#ff9d9e9d"  
  7.                      android:centerColor="#ff5a5d5a"  
  8.                      android:centerY="0.75"  
  9.                     android:endColor="#ff747674"  
  10.                      android:angle="270"  
  11.             />  
  12.          </shape>  
  13.     </item>     
  14.      <itemandroid:iditemandroid:id="@android:id/secondaryProgress">  
  15.          <clip>  
  16.              <shape>  
  17.                  <cornersandroid:radiuscornersandroid:radius="5dip"/>  
  18.                  <gradient  
  19.                          android:startColor="#80ffd300"  
  20.                         android:centerColor="#80ffb600"  
  21.                          android:centerY="0.75"  
  22.                         android:endColor="#a0ffcb00"  
  23.                          android:angle="270"  
  24.                  />  
  25.             </shape>  
  26.         </clip>  
  27.     </item>     
  28.     <itemandroid:iditemandroid:id="@android:id/progress">  
  29.          <clip>  
  30.              <shape>  
  31.                  <cornersandroid:radiuscornersandroid:radius="5dip"/>  
  32.                  <gradient  
  33.                          android:startColor="#ffffd300"  
  34.                          android:centerColor="#ffffb600"  
  35.                          android:centerY="0.75"  
  36.                         android:endColor="#ffffcb00"  
  37.                          android:angle="270"  
  38.                  />  
  39.              </shape>  
  40.          </clip>  
  41.      </item>  
  42.  </layer-list>  
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">   <itemandroid:id="@android:id/background"><shape><cornersandroid:radius="5dip"/><gradientandroid:startColor="#ff9d9e9d"android:centerColor="#ff5a5d5a"android:centerY="0.75"android:endColor="#ff747674"android:angle="270"/></shape></item>   <itemandroid:id="@android:id/secondaryProgress"><clip><shape><cornersandroid:radius="5dip"/><gradientandroid:startColor="#80ffd300"android:centerColor="#80ffb600"android:centerY="0.75"android:endColor="#a0ffcb00"android:angle="270"/></shape></clip></item>   <itemandroid:id="@android:id/progress"><clip><shape><cornersandroid:radius="5dip"/><gradientandroid:startColor="#ffffd300"android:centerColor="#ffffb600"android:centerY="0.75"android:endColor="#ffffcb00"android:angle="270"/></shape></clip></item></layer-list>

释义:

     <item android:id="@android:id/background">:定义进度条的背景样式

     <item android:id="@android:id/secondaryProgress">:辅助进度条的样式

    <item android:id="@android:id/progress">:进度条的样式

思考:如果我想做垂直进度条,怎么办了?

关键在clip元素的属性上做修改

<clipandroid:clipOrientation="vertical"    定义滚动的方向 vertical为垂直方向android:drawable="@drawable/progress1" 定义进度的图片 android:gravity="bottom" > 定义进度的开始位置 </clip>

 

5.定义样式文件progress_vertical.xml

image

progress_vertical.xml文件代码如下

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?>  
  2. <layer-listxmlns:androidlayer-listxmlns:android="http://schemas.android.com/apk/res/android">  
  3.      <itemandroid:iditemandroid:id="@android:id/progress">  
  4.         <clip  
  5.             android:clipOrientation="vertical"  
  6.         android:drawable="@drawable/progress1"  
  7.          android:gravity="bottom">  
  8.       </clip>  
  9.  </item>  
  10. </layer-list>  
<?xmlversion="1.0"encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@android:id/progress"><clipandroid:clipOrientation="vertical"android:drawable="@drawable/progress1"android:gravity="bottom"></clip></item>
</layer-list>

 

 

6.应用自定义的样式 

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <Button  
  2.         android:id="@+id/btStart"  
  3.         android:layout_width="fill_parent"  
  4.         android:layout_height="wrap_content"  
  5.         android:layout_marginTop="150dp"  
  6.         android:text="开始"/>  
  7.    
  8.     <ProgressBar  
  9.         android:id="@+id/pbPic"  
  10.         style="@android:style/Widget.ProgressBar.Horizontal"  
  11.         android:layout_width="50dp"  
  12.         android:layout_height="68dp"  
  13.         android:background="@drawable/progress2"  
  14.         android:max="100"  
  15.         android:progress="0"  
  16.         android:progressDrawable="@drawable/progress_vertical" />    <!-- 在此属性上应用 -->  
  17.    
  18.     <TextView  
  19.         android:id="@+id/txtProgress"  
  20.         android:layout_width="wrap_content"  
  21.         android:layout_height="wrap_content"/>  
<Buttonandroid:id="@+id/btStart"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="150dp"android:text="开始"/><ProgressBarandroid:id="@+id/pbPic"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="50dp"android:layout_height="68dp"android:background="@drawable/progress2"android:max="100"android:progress="0"android:progressDrawable="@drawable/progress_vertical" />    <!-- 在此属性上应用 --><TextViewandroid:id="@+id/txtProgress"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

 

7.点击按钮模拟进度滚动的效果

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="color:#333333;">public class  ProgressActivity extends Activity {       
  2.       ProgressBar pb = null;  
  3.       TextView txtProgress;  
  4.       Handler handler = new Handler();  
  5.       @Override  
  6.       publicvoid onCreate(Bundle savedInstanceState) {  
  7.            super.onCreate(savedInstanceState);  
  8.            setContentView(R.layout.main);  
  9.            System.out.println("主题=" + getTheme() + "");  
  10.            pb = (ProgressBar) findViewById(R.id.pbPic);  
  11.            Button btnStart = (Button) findViewById(R.id.btStart);//按钮  
  12.            txtProgress = (TextView) findViewById(R.id.txtProgress);//显示进度  
  13.            btnStart.setOnClickListener(new OnClickListener() {//按钮点击事件  
  14.                  publicvoid onClick(View v) {  
  15.                       new Thread(new Runnable() {//创建并启动线程,使用线程执行模拟的任务  
  16.                                        publicvoid run() {  
  17.                                              for (inti = 0; i < 100; i++) { //循环100遍  
  18.                                                   try {  
  19.                                                         handler.post(new Runnable() { //更新界面的数据  
  20.                                                               publicvoid run() {  
  21.                                                                    pb.incrementProgressBy(1);//增加进度  
  22.                                                                    txtProgress.setText(pb.getProgress() + "%");//显示完成的进度  
  23.                                                               }  
  24.                                                         });  
  25.                                                         Thread.sleep(100);  
  26.                                                   } catch (InterruptedException e) {  
  27.    
  28.                                                   }  
  29.                                              }  
  30.                                        }  
  31.                                   }).start();  
  32.                  }  
  33.            });  
  34.       }</span>  
  35. }  
<span style="color:#333333;">public class  ProgressActivity extends Activity {     ProgressBar pb = null;TextView txtProgress;Handler handler = new Handler();@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);System.out.println("主题=" + getTheme() + "");pb = (ProgressBar) findViewById(R.id.pbPic);Button btnStart = (Button) findViewById(R.id.btStart);//按钮txtProgress = (TextView) findViewById(R.id.txtProgress);//显示进度btnStart.setOnClickListener(new OnClickListener() {//按钮点击事件publicvoid onClick(View v) {new Thread(new Runnable() {//创建并启动线程,使用线程执行模拟的任务publicvoid run() {for (inti = 0; i < 100; i++) { //循环100遍try {handler.post(new Runnable() { //更新界面的数据publicvoid run() {pb.incrementProgressBy(1);//增加进度txtProgress.setText(pb.getProgress() + "%");//显示完成的进度}});Thread.sleep(100);} catch (InterruptedException e) {}}}}).start();}});}</span>
}

 

 

转载于:https://www.cnblogs.com/hudabing/p/4571113.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(笔试题)二进制1的个数相同的距离最小数

题目&#xff1a; 输入&#xff1a;整数A输出&#xff1a;整数B条件&#xff1a;A和B的二进制1的个数相同&#xff0c;且A和B之间的距离|A-B|最小。思路&#xff1a; 题目没有说明整数类型&#xff0c;这里认为是带符号的整数&#xff0c;即区分正负数。 根据题意&#xff0c;A…

hadoop5--mapreduce设计模式

运行结果附图 本节课程主要内容为学习MapReduc设计模式&#xff0c;并编写java程序对日志文件进行处理。 课本上介绍的MapReduce的设计模式主要包含:计数(Counting),分类(Classification),过滤处理(Filtering),排序(Sorting),去重计数(Distinct Counting),相关计数(Cross-Corre…

jqGrid,REST,AJAX和Spring MVC集成

两年多以前&#xff0c;我写了一篇关于两个如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代方法。…

Java-马士兵设计模式学习笔记-代理模式--动态代理 修改成可以代理任意接口

一、概述 1.目标&#xff1a;把Proxy修改成可以代理任意接口及其任意方法 2.思路&#xff1a; (1)代理任意接口&#xff1a;把接口类型作为参数传给Proxy的newProxyInstance(Class interfze) (2)代理任意方法&#xff1a;用interfze.getMethods()取出所有方法&#xff0c;拼接实…

C语言5-7习题

本题要求实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义  任意边小于其余三边之和 换句话说就是  最长边小于其余三边之和 这样的话问题转化为 最长边依次减其余三边的结果是否小于等于0 还有一点是题目出现0边 即最…

习题6-1 分类统计字符个数 (15 分)

本题要求实现一个函数&#xff0c;统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义&#xff1a; void StringCount( char s[] );其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter 英文字母个数, blank 空格或回车…

Servlet 3.0异步处理可将服务器吞吐量提高十倍

Servlet是Java中处理服务器端逻辑的主要组件&#xff0c;新的3.0规范引入了一些非常有趣的功能&#xff0c;其中异步处理是最重要的功能之一。 可以利用异步处理来开发高度可伸缩的Web应用程序。 使用此功能可以有效地构建Web 2.0站点和AJAX应用程序。 我们的JCG合作伙伴之一To…

使用secureCRT连接VMware-Ubuntukylin虚拟机

使用SecureCRT连接VMware时总是提醒主机拒绝连接。这时可以使用sudo apt-get install openssh-server openssh-client&#xff0c;在主机上安装ssh. 安装成功后&#xff0c;可以连接到主机了。 如果显示远程主机拒绝连接。则可以使用如下方法。 VMware里面装的是Ubuntukylin版本…

国内有哪些好的刷题网站?

http://www.zhihu.com/question/25574458 Luau Lawrence&#xff0c;Data Mining 弱鸡 / PhDNTU 温梦强、石一帆、知乎用户 等人赞同 - Welcome To PKU JudgeOnline 北京大学的Online Judge。POJ上面的题目有点老了&#xff0c;但好处是做的人多&#xff0c;经典算法题多&…

Js 流程控制

流程控制 顺序、分支、循环 顺序结构 代码一行一行从上往下执行并解析 分支结构 if语句 switch语句 if语句 单分支 if(条件表达式){ //语句块 } 含义&#xff1a;当条件表达式为真的时候就执行里面的语句块 示例&#xff1a; 双分支&#xff1a; if(条件表达式){ //语句块1 }el…

SmartGWT入门,提供出色的GWT界面

SmartGWT简介 我最近开始使用SmartGWT &#xff0c;它是一个基于GWT的框架&#xff0c;该框架为您的应用程序UI提供了一个全面的小部件库&#xff0c;并为服务器端的数据管理提供了帮助。 您可以在SmartGWT展示柜上查看其漂亮的功能。 我准备了一个简短的“入门”指南&#xf…

Android OpenGL ES(四)----调整屏幕的宽高比

1.宽高比问题 我们现在相当熟悉这样一个事实&#xff0c;在OpenGL里&#xff0c;我们要渲染的一切物体都要映射到X轴和Y轴上[-1&#xff0c;1]的范围内&#xff0c;对于Z轴也一样。这个范围内的坐标被称为归一化设备坐标&#xff0c;其独立于屏幕实际尺寸或形状。 不幸的是&…

使用Spring Security保护GWT应用程序

在本教程中&#xff0c;我们将看到如何将GWT与Spring的安全模块&#xff08;即Spring Security&#xff09;集成在一起。 我们将看到如何保护GWT入口点&#xff0c;如何检索用户的凭据以及如何记录各种身份验证事件。 此外&#xff0c;我们将实现自定义身份验证提供程序&#x…

Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务-Eclipse和Maven项目

开发Web服务的RESTful方法不断受到越来越多的关注&#xff0c;并且似乎正在将SOAP淘汰。 我不会讨论哪种方法更好&#xff0c;但是我相信我们都同意REST更轻量级。 在本教程中&#xff0c;我将向您展示如何使用RESTeasy开发RESTful服务以及如何将它们部署在Tomcat服务器上。 在…

数据值、列类型和数据字段属性

数据值&#xff1a;数值型、字符型、日期型和空值等。数据列类型 2.1 数值类的数据列类型2.2 字符串类数据列类型 2.3 日期和时间型数据数据列类型 另外&#xff0c;也可以使用整形列类型存储UNIX时间戳&#xff0c;代替日期和时间列类型&#xff0c;这是基于PHP的web项目中常…

全文搜索Apache Lucene简介

在本教程中&#xff0c;我想谈谈Apache Lucene 。 Lucene是一个开源项目&#xff0c;提供基于Java的索引和搜索技术。 使用其API&#xff0c;很容易实现全文搜索 。 我将处理Lucene Java版本 &#xff0c;但请记住&#xff0c;还有一个名为Lucene.NET的.NET端口&#xff0c;以及…

Java中的低GC:使用原语而不是包装器

总览 有两个很好的理由在可能的地方使用原语而不是包装器。 明晰。 通过使用原语&#xff0c;您可以清楚地知道null值是不合适的。 性能。 使用原语通常更快。 清晰度通常比性能更重要&#xff0c;并且是使用它们的最佳理由。 但是&#xff0c;本文讨论了使用包装程序对性能…

Java Secret:使用枚举构建状态机

总览 Java中的枚举比许多其他语言更强大&#xff0c;这可能导致令人惊讶的用途。 在本文中&#xff0c;我概述了Java 枚举的一些单独功能&#xff0c;并将它们组合在一起形成一个状态机。 单例和实用程序类的枚举 您可以非常简单地将枚举用作Singleton或Utility。 enum Si…

指向函数的指针

指向函数的指针变量的一般形式为&#xff1a;数据类型 &#xff08;*指针变量名&#xff09;&#xff08;函数参数表列&#xff09;&#xff1b;如&#xff1a; int (*p)(int ,int );1、int (*p)(int ,int );表示定义一个指向函数的指针变量p&#xff0c;它不是固定只能指向…