1. 程式人生 > >ProgressBar自定義樣式

ProgressBar自定義樣式

        我們我們經常在做一些耗時的操作時提示個圈圈,達到提升使用者體驗的效果,那麼系統預設的圈圈當然不能滿足我們的需求了,畢竟顏色風格跟我們自身的應用肯定是有一定差距的,那麼看看如何自定義小圈圈的顏色,或者換成自己想要的圖片! 

一、首先我們看下ProgressBar的用法

<ProgressBar
    android:id="@+id/refresh_header_pb_loading"
    android:layout_width="22dp"
    android:layout_height="22dp"
    android:indeterminateDrawable="@drawable/refrensh_progressbar"
    android:layout_gravity="center"
    android:visibility="invisible" />

在我們不指定style屬性的時候,我們將會看到一個預設的圈圈,也就是android原生那個醜醜的,那麼這個時候我們如何去自定義這個圈圈,讓它變成我們想要的樣式呢?其實我們只要關注indeterminateDrawable 這個屬性即可!我們看到這個屬性指向的是drawable中的檔案,其實這個檔案可以是一張圖片,也可以是一個xml檔案所定義的動畫等等,那麼接下拉我們就以一個rotate的動畫進行說明!

二、refrensh_progressbar動畫的定義

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%" android:pivotY="50%"
    android:fromDegrees="0"
    android:toDegrees="360">

    <shape
        android:shape="ring"
        android:innerRadiusRatio="3"
        android:thicknessRatio="8"
        android:useLevel="false">
        <gradient
        android:type="sweep"
        android:useLevel="false"
        android:startColor="#ffded3"
        android:centerColor="#ffff00"
        android:centerY="0.50"
        android:endColor="#ff5e43" />
    </shape>

</animated-rotate>

由上述程式碼我們可以看到,我們定義了一個animated-rotate的動畫,這個動畫我們並沒有使用drawble的屬性去指定對應的圖片,而是而是選擇自定義shape的方式,那麼接下來我們對rotate動畫以及shape進行說明

1、旋轉動畫aimated-rotate,其中幾個常用的屬性

  • privotX:動畫中心點相對控制元件的X座標
  • privotY:動畫中心點相對控制元件的Y座標
  • fromDegrees:旋轉動畫開始角度
  • toDeggrees:旋轉動畫結束時角度
  • drawable:由於上面的例子我們是自己寫的一個shape,其實我們還可以通過drawable這個屬性設定一張圖片的
  • duration:設定旋轉一週時間

2、shape的幾個常用屬性

  •   android:shape=["rectangle" | "oval" | "line" | "ring"];shape的形狀,預設為矩形,可以設定為矩形(rectangle)、橢圓形(oval)、線性形狀(line)、環形(ring)
  • 下面的屬性只有在android:shape="ring時可用:
        >android:innerRadius 尺寸,內環的半徑。        >android:innerRadiusRatio 浮點型,以環的寬度比率來表示內環的半徑,例如,如果android:innerRadiusRatio=5,表示內環半徑等於環的寬度除以5,這個值是可以被android:innerRadius覆蓋,預設為9        >android:thickness 尺寸,環的厚度        >android:thicknessRatio 浮點型,以環的寬度比率來表示環的厚度,例如,如果android:thicknessRatio="2" 那麼環的厚度就等於環的寬度除以2。這個值是可以被android:thickness覆蓋的,預設值是3.        >android:useLevel boolean值,如果當做是LevelListDrawable使用時值為true,否則為false.
  • gradient,設定shape的顏色漸變的
  • android:type ["linear" | "radial" | "sweep"] 漸變型別(取值:linear、radial、sweep)、 linear 線性漸變這是預設設定、radial 放射性漸變,以開始色為中心、sweep 掃描線式的漸變。
  • android:useLevel ["true" | "false"] 如果要使用LevelListDrawable物件,就要設定為true。設定為true無漸變。false有漸變色。
  • android:gradientRadius 整型 漸變色半徑.當 android:type="radial" 時才使用。單獨使用 android:type="radial"會報錯。
  • android:centerX 整型 漸變中心X點座標的相對位置
  • android:centerY 整型 漸變中心Y點座標的相對位置
  • android:startColor 表示漸變開始顏色
  • android:centerColor表示漸變的中間顏色
  • android:endColor表示漸變的結束顏色

至此,drawble的基本寫法已經介紹了,下面我們看下上面程式碼應用後的效果圖: