各种自定义进度条(progressbar或seekbar)的实现


1.可以动的蜗牛进度条(seekbar):https://github.com/android-cjj/SnailBar






边框就是设置seekbar的background为一个sharp或一个.9图片

进度条就是一个layerlist

thumb设置成一个动画:

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">

    <item android:drawable="@drawable/s1" android:duration="300" />

    <item android:drawable="@drawable/s2" android:duration="300" />

    <item android:drawable="@drawable/s3" android:duration="300" />

    <item android:drawable="@drawable/s4" android:duration="300" />

    <item android:drawable="@drawable/s5" android:duration="300" />

</animation-list>
seekbar的thumb设置为这个逐帧动画:

android:thumb="@drawable/snailanim"


<?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:paddingTop="3px"
android:paddingBottom="3px">
<shape>
<corners android:radius="10dip" />
<gradient
android:startColor="#ffd9e5e6"
android:centerColor="#ffdeeaeb"
android:endColor="#ffd9e5e6"
android:centerY="0.45"
android:angle="270"/>
</shape>
</item>

<item android:id="@android:id/progress"
android:paddingTop="3px"
android:paddingBottom="3px" >
<clip>
<shape>
<corners android:radius="10dip" />
<gradient
android:startColor="#ff7efd21"
android:centerColor="#ffdfffc5"
android:endColor="#ff87f31a"
android:centerY="0.45"
android:angle="270"/>
</shape>
</clip>
</item>
</layer-list>

2.纵向的progressbar:

<?xml version="1.0" encoding="utf-8"?>
<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:clipOrientation="vertical" android:gravity="bottom">
            <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:clipOrientation="vertical" android:gravity="bottom">
            <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>

clip的clipOrientation指定进度条是横向还是竖向,默认是横向,gravity属性指定对齐方式,默认是竖向中间横向靠左


<ProgressBar

    android:indeterminateOnly="false"
    android:indeterminateDrawable="@drawable/animlist_vprogressbar"
    android:progressDrawable="@drawable/layerlist_vprogress"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:id="@+id/progressBar"
    android:minWidth="10dp"
    android:maxWidth="10dp"
    android:progress="30"
    android:layout_centerInParent="true"
     />

indeterminateOnly:是模糊的还是精细的进度,true时为模糊进度条,fasle为水平或垂直精确进度条

android:indeterminateDrawable:表示模糊进度的逐帧动画,此处可以不指定,当然,也可以指定indeterminateOnly为true,这样这个动画就可以起作用了

layout_height/width:竖向时指定具体高度,宽度可以为wrap_content

min/maxwidth:如果是横向的,指定的就是min/maxheight,指定这个,让进度条粗细合适



3.模糊进度也可以用横向的进度条显示出来:

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:indeterminateOnly="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/progressBar"
    android:minWidth="10dp"
    android:maxWidth="10dp"
    android:progress="30"
     />

如下面那个进度条显示的那样:



4.三种自定义圆形进度条的方式:

4.1.使用逐帧动画:

动画drawable:

<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
   xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:duration="150" android:drawable="@drawable/loading_01" />
   <item android:duration="150" android:drawable="@drawable/loading_02" />
   <item android:duration="150" android:drawable="@drawable/loading_03" />
   <item android:duration="150" android:drawable="@drawable/loading_04" />
   <item android:duration="150" android:drawable="@drawable/loading_05" />
   <item android:duration="150" android:drawable="@drawable/loading_06" />
   <item android:duration="150" android:drawable="@drawable/loading_07" />
</animation-list> 

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <ProgressBar
        android:id="@+id/loading_process_dialog_progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:indeterminateDrawable="@drawable/loading" />
</LinearLayout>

4.2.使用sharp:

drawable下新建xml,以rotate为根节点:

<?xml version="1.0" encoding="utf-8"?>

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360">
    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false">
        <gradient
            android:centerColor="#FFDC35"
            android:centerY="0.50"
            android:endColor="#CE0000"
            android:startColor="#FFFFFF"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

直接用shape不会旋转

布局文件一样

4.3.使用图片:

drawable下新建xml:

<?xml version="1.0" encoding="utf-8"?>

<rotate android:drawable="@drawable/dialog_progress_round"
   android:fromDegrees="0.0"
   android:toDegrees="360.0"
   android:pivotX="50.0%"
   android:pivotY="50.0%"
   xmlns:android="http://schemas.android.com/apk/res/android" />
或:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:drawable="@drawable/dialog_progress_round"
            android:fromDegrees="0.0"
            android:pivotX="50.0%"
            android:pivotY="50.0%"
            android:toDegrees="360.0" />
    </item>
</layer-list>

布局文件一样


以上都没有指定style,默认style是:style="?android:attr/progressBarStyle"

如果要放大,可以用:progressBarStyleLarge,缩小用:progressBarStyleSmall








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值