Android中 如何让水平进度条(ProgressBar)从左往右变化
2011-06-13 16:37
417 查看
今天尝试做个类似街霸中的游戏场景,头部需要显示PK双方的血条。为了达到一个对称的效果,右边的血条要从左往右减少。
展现血条首先想到的是使用ProgressBar,但是发现都是从右往左减少。google了下,没发现有资料介绍如何配置来实现从左到右变化的效果。万幸的是,我们可以看到源码。那么自己动手,丰衣足食.
一、失败的尝试
首先想到的是使用Matrix来做镜像处理。
将ProgressBar中的源码copy出来,建一个自己的进度条MyProgressBar。
当然,这中间要处理很多错误信息。需要定义自己的进度条可配置的属性,样式等等。
修改ProgressBar中的onDraw方法:
跑起来后发现progressBar中存在MinWidth和MaxWidth,不同
情况下会影响布局。无奈下只能跟代码了。
二、成功的尝试
这次跟进了
d.draw(canvas);
这行代码,发现progressBar在构造的时候使用了ClipDrawable. 阅读下文档发下如下介绍:
android:clipOrientation The orientation for the clip.
android:gravity Specifies where to clip within the drawable.
翻译过来就是:
android:clipOrientation 定义裁剪的方向(水平方向裁剪还是垂直方向裁剪)
android:gravity 指定drawable中可裁剪的部分
尝试修改了下progressBar的Drawable配置文件:
同时定义进度条的样式:
运行后的效果:
展现血条首先想到的是使用ProgressBar,但是发现都是从右往左减少。google了下,没发现有资料介绍如何配置来实现从左到右变化的效果。万幸的是,我们可以看到源码。那么自己动手,丰衣足食.
一、失败的尝试
首先想到的是使用Matrix来做镜像处理。
将ProgressBar中的源码copy出来,建一个自己的进度条MyProgressBar。
当然,这中间要处理很多错误信息。需要定义自己的进度条可配置的属性,样式等等。
修改ProgressBar中的onDraw方法:
// modified start Matrix m = new Matrix(); m.setScale(-1,1); m.postTranslate(d.getMinimumWidth() + getPaddingLeft(),getPaddingTop()); canvas.setMatrix(m); // modified end d.draw(canvas);
跑起来后发现progressBar中存在MinWidth和MaxWidth,不同
情况下会影响布局。无奈下只能跟代码了。
二、成功的尝试
这次跟进了
d.draw(canvas);
这行代码,发现progressBar在构造的时候使用了ClipDrawable. 阅读下文档发下如下介绍:
android:clipOrientation The orientation for the clip.
android:gravity Specifies where to clip within the drawable.
翻译过来就是:
android:clipOrientation 定义裁剪的方向(水平方向裁剪还是垂直方向裁剪)
android:gravity 指定drawable中可裁剪的部分
尝试修改了下progressBar的Drawable配置文件:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ff9d9e9d" android:centerColor="#ff5a5d5a" android:centerY="0.75" android:endColor="#ff747674" android:angle="270" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <!-- 设置从左往右变化 --> <clip android:gravity="right"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#80ffd300" android:centerColor="#80ffb600" android:centerY="0.75" android:endColor="#a0ffcb00" android:angle="270" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <!-- 设置从左往右变化 --> <clip android:gravity="right"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ffffd300" android:centerColor="#ffffb600" android:centerY="0.75" android:endColor="#ffffcb00" android:angle="270" /> </shape> </clip> </item> </layer-list>
同时定义进度条的样式:
<?xml version="1.0" encoding="utf-8"?> <resources> <mce:style name="myProgressBarStyle"><!-- <item name="indeterminateOnly">false</item> <item name="progressDrawable">@drawable/progress_horizental</item> <item name="minHeight">12dip</item> <item name="maxHeight">12dip</item> <item name="minWidth">100dip</item> <item name="maxWidth">150dip</item> --></mce:style><style name="myProgressBarStyle" mce_bogus="1"> <item name="indeterminateOnly">false</item> <item name="progressDrawable">@drawable/progress_horizental</item> <item name="minHeight">12dip</item> <item name="maxHeight">12dip</item> <item name="minWidth">100dip</item> <item name="maxWidth">150dip</item> </style> </resources>
运行后的效果:
相关文章推荐
- Android 如何在 ListView 中更新 ProgressBar 进度
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android 如何在 ListView 中更新 ProgressBar 进度
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android ProgressBar高级自定义水平/圆形进度条
- Android 螺旋水平进度条 progressbar
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- android progressbar 水平进度条
- Android简单自定义圆形和水平ProgressBar
- Android ProgressBar自定义图片进度,自定义渐变色进度条
- 【Android学习】进度条ProgressBar
- Settings: android 组件如何响应语言变化
- 我的Android进阶之旅------>Android之进度条(ProgressBar)的功能和用法
- android 关于音乐进度 circular-music-progressbar
- Android ProgressBar自定义图片进度,自定义渐变色进度条
- android 水平progressBar动态加载
- Android中如何检测重力感应变化:Sensor和SensorManager
- Android简单自定义圆形和水平ProgressBar