自定義圓形的ProgressBar

文章轉自http://www.cnblogs.com/xingfuzzhd/archive/2013/12/28/3495941.html

自定義圓形的ProgressBar

1.自定義圓形的ProgressBar

  效果圖:

  圓形ProgressBar的樣式主要有以下幾個,我們這裏以progressBarStyleLarge爲例進行樣式的修改,其他的類似。

    

<ProgressBar
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"
  style="?android:attr/progressBarStyleLarge"/>  

  首先看一下style="?android:attr/progressBarStyleLarge"的源碼,在 \frameworks\base\core\res\res\values\styles.xml

複製代碼
<style name="Widget.ProgressBar.Large">
  <item name="android:indeterminateDrawable">@android:drawable/progress_large_white</item>
  <item name="android:minWidth">76dip</item>
  <item name="android:maxWidth">76dip</item>
  <item name="android:minHeight">76dip</item>
  <item name="android:maxHeight">76dip</item>
</style>
複製代碼

   看到這一行<item name="android:indeterminateDrawable">@android:drawable/progress_large_white</item>有木有,我們去看一下它的源碼,在 \frameworks\base\core\res\res\drawable\progress_large_white.xml

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_white_76"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="0"
    android:toDegrees="360" />

  看到這一行 android:drawable="@drawable/spinner_white_76" 我們就明白了,原來它在這裏放了一張圖片,進行旋轉。

  接下來我定義自己的ProgressBarStyle:

  首先我們先找一張圖片加入我們的項目中(如一開始的效果圖片),然後在drawable下新建progress_large.xml文件

複製代碼
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/progress_large"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />
複製代碼

  在 \value\style.xml中定義myProgressBarStyleLarge

複製代碼
<style name="myProgressBarStyleLarge" >
  <item name="android:indeterminateDrawable">@drawable/progress_large</item>
  <item name="android:minWidth">76dip</item>
  <item name="android:maxWidth">76dip</item>
  <item name="android:minHeight">76dip</item>
  <item name="android:maxHeight">76dip</item>
</style>
複製代碼

  最後在ProgressBar中使用我們自己定義的style,android:indeterminateDuration="700"指定圖片旋轉的速度,這樣我們就可以根據自己的需要來定義ProgressBar的樣式。

<ProgressBar
  style="@style/myProgressBarStyleLarge"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:indeterminateDuration="700" />

2.上面是通過一張圖片填充android:indeterminateDrawable,我們也可以定義一個動畫或者自定義顏色來實現,跟圖片的用法一樣:

  定義res/anim/progress_large_loading.xml如下:

複製代碼
<?xml version="1.0" encoding="UTF-8"?>  
<animation-list android:oneshot="false"  
  xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:duration="100" android:drawable="@drawable/loading_1" />  
  <item android:duration="100" android:drawable="@drawable/loading_2" />  
  <item android:duration="100" android:drawable="@drawable/loading_3" />  
  <item android:duration="100" android:drawable="@drawable/loading_4" />  
  <item android:duration="100" android:drawable="@drawable/loading_5" />  
  <item android:duration="100" android:drawable="@drawable/loading_6" />
</animation-list>   
複製代碼

  在我們定義的style中引入<item name="android:indeterminateDrawable">@anim/progress_large_loading</item>

  定義res/drawable/progress_large_shape.xml如下:

複製代碼
<?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="#FFFFFF"  
      android:centerY="0.50"  
      android:endColor="#1E90FF"  
      android:startColor="#000000"  
      android:type="sweep"  
      android:useLevel="false" />  
  </shape>  
</rotate>  
複製代碼

  在我們定義的style中引入<item name="android:indeterminateDrawable">@drawable/progress_large_shape</item>

 


發佈了8 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章