Android ProgressBar 反向进度条/进度条从右到左走

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

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

那么进度条怎样从右向左显示呢?

方案一:

将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 反向进度条/进度条从右到左走

时间: 2024-10-15 10:02:15

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

Android ProgressBar实现加载进度条

progressBar Android进度条组件. progressBar的关键属性: android:max="100"     最大显示进度条 android:progress="500"     第一显示进度 android:secondaryProgress="80"     第二显示进度 android:indeterminate="true"     设置是否精确显示 progressBar的关键方法: setPr

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

我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示. requestWindowFeature可以设置的值有:(具体参考 点击链接查看效果)    1.DEFAULT_FEATURES:系统默认状态,一般不需要指定        // 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定        // 3.FEATURE_CUSTOM_TITLE:自定义标

【Android 初学】8、进度条(ProgressBar、SeekBar、RatingBar)

Start Android 现在发现每个控件的使用方法都大同小异,所以决定加快学习步骤,这一部分的笔记就写的简略了. 1.Android当中的进度条 2.各种进度条之间的关系 3.ProgressBar进度条的风格 4.ProgressBar的使用方法 ProgressBar的Style 主要有两大类 进度条的主要属性 进度条最大值:max 当前进度:progress 次要进度的值:SecondaryProgress 1.SeekBar的主要属性 1)进度条最大值:max 2)当前进度:prog

Android常用控件:进度条

各种进度条属于 ProgressBar的子类 Sytle: 水平风格:Horizontal小风格:Small大风格:Large反向风格:Inverse小反向风格:Small.Inverse大反向风格:Large.Inverse 设置style:   style="?android:attr/progressBarStyle..." 主要属性:最大值:max当前进度:progress次要进度值:SecondaryProgress --效果类似于看电影那些缓冲 判断进度条是转圈还是水平的方

【android】带加载进度条的WebView (附demo下载)

/** * * 此WebViewWithProgress继承自Relativielayout, * 如果要设置webview的属性,要先调用getWebView()来取得 * webview的实例 * * @author Administrator * */ public class WebViewWithProgress extends RelativeLayout{ private Context context; private WebView mWebView = null; //水平进

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

PS:将来的你会感谢现在奋斗的自己.... 学习内容: 1.进度条 2.拖动条 3.星级评论条 1.进度条...       进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此为之设置一个进度条使应用程序的运行状态更好的反馈给客户...这也就是进度条的作用...因此一般的应用程序都会加入进度条...进度条分为圆形进度条和线性的进度条...目的都是一样的,只是展示的效果是不同的...用代码讲解一下... <LinearLayout xmlns:android="htt

Android中的webview的进度条

<application android:icon="@drawable/hunqin" android:label="@string/app_name" android:theme="@android:style/Theme.Light" > 主题 android:theme------->必须不能使Theme.Light.NoTitleBar 否则不起作用 requestWindowFeature(Window.FEATUR

EasyUI基础入门之searchbox&amp;progressbar(搜索框和进度条)

easyui基础部分的学习(八大部分)只剩下searchbox和pargressbar.tooltip了,有点小激动呢.本偏文章将对searchbox和pargressbar做一个学习.鉴于两者的内容都不会太多,这里就直接将之合并在一起啦! searchbox 不用过多解释,只要用于用户对数据的搜索.使用$.fn.searchbox.defaults重载默认值. 依赖组件:菜单按钮. searchbox提示用户输入搜索值.它可以设定一个类别菜单,允许用户选择不同的搜索类别.当用户点击确认按钮时将

android异步任务图片下载(进度条提示进度)

一.AsyncTask介绍 Android提供了几种在其他线程中访问UI线程的方法. Activity.runOnUiThread( Runnable ) View.post( Runnable ) View.postDelayed( Runnable, long ) Hanlder 这些类或方法同样会使你的代码很复杂很难理解.然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕. 为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界