近期的项目,有个需求须要使用条状图显示比例,而且右对齐,见下图:

我想到了使用进度条,这样不就不须要在代码动态绘制条状了,省了非常多活。

那么进度条如何从右向左显示呢?

方案一:

将ProgressBar的前背景反着用,将前景色设置为和整个大背景同一色,将背景设置为你要的条状图颜色,这样就看不出实际的进度,看到的是进度背景,在视觉上看上去就是右对齐了。实际上还是原来那个进度条。

缺点:我这个进度条是放在ListView的item中的,点击listview,由于listview有选中的背景显示出来,这样ProgressBar的前景色就原形毕露了。

方案二:

重写ProgressBar的onDraw函数,通过旋转画布(Canvas)180度,达到自右至左的进度效果。这个方法理论上可行,网上有人旋转了90度,是能够的,參考地址:

http://www.xprogrammer.com/234.html

http://www.verydemo.com/demo_c131_i3507.html

关键代码:

@Override
protected synchronized void onDraw(Canvas canvas) { switch (curr_mode)
{
case MODE_BOTTOM:
canvas.rotate(-90);
canvas.translate(-canvas.getHeight(), 0);
super.onDraw(canvas);
break;
case MODE_TOP:
canvas.rotate(90,canvas.getWidth(),0);
canvas.translate(10,0);
super.onDraw(canvas);
break;
}

此方案缺点:须要计算旋转中心点,比較复杂,因为对canvas旋转不熟,我终于没能旋转180度成功,哪位大神搞定了告诉我一声,共同学习

方案三:

此方案是最优方案,简单高效!利用Drawable本身的属性,反向绘制进度条。这里将backgroud凝视掉,不显示backgroud,然后对前景色加上两个关键属性:android:clipOrientation="horizontal",android:gravity="right",这样就能做到从右到左画进度条。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- <item
android:id="@android:id/background"
android:drawable="@drawable/progress_bg"/> -->
<item android:id="@android:id/progress">
<clip
android:clipOrientation="horizontal"
android:gravity="right" >
<scale android:drawable="@drawable/progress_progress" />
</clip>
</item> </layer-list>

顺便学习一下Drawable的其它属性:

http://www.cnblogs.com/andriod-html5/archive/2012/04/24/2539432.html

 android:clipOrientation=["horizontal" | "vertical"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />

把对象放到容器的右边,不改变它的尺寸。当clipOrientation被设置为horizontal时,会在可绘制资源的左边进行裁剪。

Android ProgressBar 反向进度条/进度条从右到左走的更多相关文章

  1. Android ProgressBar实现加载进度条

    progressBar Android进度条组件.   progressBar的关键属性:      android:max="100"     最大显示进度条      andr ...

  2. Android -- ProgressBar(进度条的使用)

    我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示. requestWindowFeature可以设置的值有:(具 ...

  3. Android——ProgressBar(进度条)

    参考资料来源于菜鸟教程--学的不仅是技术,更是梦想! 学习! 1.常用属性讲解与基础实例 从官方文档,我们看到了这样一个类关系图: ProgressBar继承与View类,直接子类有AbsSeekBa ...

  4. Android再学习-20141018-布局-进度条

    20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...

  5. Android View 之进度条+拖动条+星级评论条....

    PS:将来的你会感谢现在奋斗的自己.... 学习内容: 1.进度条 2.拖动条 3.星级评论条 1.进度条...       进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此 ...

  6. android 开发-自定义多节点进度条显示

    看效果图: 里面的线段颜色和节点图标都是可以自定义的. main.xml <RelativeLayout xmlns:android="http://schemas.android.c ...

  7. Android NumberProgressBar:动态移动显示百分比进度的进度条

     Android NumberProgressBar:动态移动显示百分比进度的进度条 NumberProgressBar是github上一个开源项目,其项目主页是:https://github.c ...

  8. Xamarin XAML语言教程使用方法设置进度条进度

    Xamarin XAML语言教程使用方法设置进度条进度 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo与Progress ...

  9. Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度

    Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性 ...

随机推荐

  1. Android 建立View 圆角

    虽然很easy,不过还是录制. 混合参观 在drawable文件下 创建一个布局文件corners_bg.xml <?xml version="1.0" encoding=& ...

  2. SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试(转)

    听说JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue. 对于容器类在并发环境下的比 ...

  3. WPF学习(8)数据绑定

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  4. UVA10375 Choose and divide 质因数分解

    质因数分解: Choose and divide Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %l ...

  5. atittit.表单验证性质的原则和实施,以及选择和定义自己的兼容easyui dsl窗体身份验证规则

    atittit.表单验证性质的原则和实施,以及选择和定义自己的兼容easyui dsl规则的表单验证 1. 需求,表单验证须要弹框式,但眼下easyui ms绑定死了tooltip式样 1 2. 表单 ...

  6. 走进spring之springmvc

    走进spring之springmvc 在动手之前,我们需要了解下springnvc.这里先献上一张springmvc的流程图及讲解. Spring的MVC框架是一个基于DispatcherServle ...

  7. (大数据工程师学习路径)第三步 Git Community Book----Git介绍

    一.git诞生 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.1991年,Linus创建了开源的Linux,并且有着为数众多的参与者.虽然有世界各地的志愿者为Linux编写代码 ...

  8. hadoop 开始时间datanode一个错误 Problem connecting to server

    刚刚配置hadoop,namenode常开,但datanode但保留了错误.但不启动: 2014-05-04 10:43:33,970 WARNorg.apache.hadoop.hdfs.serve ...

  9. Javascript学习7 - 脚本化浏览器窗口

    原文:Javascript学习7 - 脚本化浏览器窗口 本节讨论了文档对象模型.客户端Javascript下Window中的各项属性,包括计时器.Location对象.Histroy对象.窗口.浏览器 ...

  10. sqlplus登录问题

    问题1.sqlplus login -- SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 在/e ...