• 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时,会在可绘制资源的左边进行裁剪。


  • 相关阅读:
    把git项目放到个人服务器上
    关于fcitx无法切换输入法的问题解决
    博客变迁通知
    (欧拉回路 并查集 别犯傻逼的错了) 7:欧拉回路 OpenJudge 数据结构与算法MOOC / 第七章 图 练习题(Excercise for chapter7 graphs)
    (并查集) HDU 1856 More is better
    (并查集 不太会) HDU 1272 小希的迷宫
    (并查集 注意别再犯傻逼的错了) HDU 1213 How Many Tables
    (最小生成树 Kruskal算法) 51nod 1212 无向图最小生成树
    (并查集) HDU 1232 畅通工程
    (最小生成树 Prim) HDU 1233 还是畅通工程
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4312875.html
Copyright © 2020-2023  润新知