Android下如何自訂ProgressBar的外觀,androidprogressbar

來源:互聯網
上載者:User

Android下如何自訂ProgressBar的外觀,androidprogressbar

在Android應用中經常會用的到一些進度條,這些進度條的樣子千差萬別,但是大多都是由ProgressBar來的。但是Android系統內建的進度條樣式卻不太好看,今天要做的就是自訂一個好看的ProgressBar。


我們先來看看Android內建的進度條的樣子:



我們今天的目標,自訂 的進度條的樣子:



不難發現差距還是挺大的,好了,廢話不多說,進入正題:

我們首先還是從源碼入手,我們可以開啟ADT目錄下的sdk\platforms\android-16\data\res\values檔案夾,由於很多Android下組件的樣式(Style)都是定義在這個檔案夾下的styles.xml檔案中的,系統預設的ProgressBar也不例外,所以我們可以開啟這裡的styles.xml檔案,並且找到ProgressBar的定義的地方:

由於今天需要一個橫向的進度條,所以我們找到ProgressBar.Horizontal:

    <style name="Widget.ProgressBar.Horizontal">        <item name="android:indeterminateOnly">false</item>        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>        <item name="android:minHeight">20dip</item>        <item name="android:maxHeight">20dip</item>    </style>


在這裡面,實際上我們需要重點關注一下progress_horizontal這個檔案,我們可以在找到這個sdk\platforms\android-16\data\res\drawable檔案夾下找到progress_horizontal.xml:

<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>            <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>            <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>

開啟一看,我們可以發現其中定義了三個item,分別是: backgroundsecondaryProgressprogress,這裡的 background就是進度條所使用的背景,對應於我們上面那副自訂進度條的圖就是灰色的部分,填充在進度條的底部;而 progress則是進度條的樣子,對應於我們上面圖示的綠色的進度條的部分; secondaryProgress在我們的圖示裡面沒有,這個組件的作用是類似於在網上看線上視頻的時候,緩衝進度顯示的那個灰色的進度條,跟觀看進度是兩個不同的進度,在這裡我們沒有加。


進一步觀察每一個item的定義方式,Android系統是直接指定了每一個item的顏色這種方法來定義樣子的,在我們這裡可以使用不同的背景圖片來定義會更加漂亮一些。


至此,源碼部分基本搞定,下面我們需要做的就是三步:

1、在我們自己的工程目錄的res/values/styles.xml檔案中添加一個style條目,名字自定,比如我們這裡叫my_pb_style,但是需要指定一個父類也就是在上面我們開啟的Android系統中的ProgressBar的樣式,同時我們需要重寫父類中設定progress_horizontal的地方,將這個xml檔案改為我們自己工程中自訂的xml檔案,比如說叫my_progressbar.xml

    <style name="my_pb_style" parent="@android:style/Widget.ProgressBar.Horizontal">        <item name="android:progressDrawable">@drawable/progressbarcolor</item>    </style>


2、在我們工程目錄下的res目錄下,建立一個drawable的檔案夾,在其中建立一個my_progressbar.xml的檔案,將上面開啟的progress_horizontal.xml檔案中的secondaryProgress的item去掉,只保留background和progress即可,然後每個item的shape部分也去掉,改為我們自己準備好的圖片,如下,其中security_progress_bg和security_progress分別為我們事先準備好的放在drawble目錄下的圖片,比如我們這裡的圖片如下:

           

<?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/security_progress_bg"/>    <item        android:id="@android:id/progress"        android:drawable="@drawable/security_progress"/></layer-list>

3、在我們需要ProgressBar的布局檔案中定義出ProgressBar,並將上面我們定義好的Style樣式添加進去即可:

<ProgressBar                android:id="@+id/progressBar1"                style="@style/my_pb_style"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:layout_marginLeft="10dp"                android:layout_marginRight="10dp" />


至此,我們就可以在檔案中來使用這個自訂外觀的ProgressBar了。




Android開發時,不知道為何ProgressBar的樣式不管怎設定都還是顯示成一個圈圈

你把這句代碼 style="@android:attr/progressBarStyleHorizontal"中的 “@”換成“?”即可了

希望能幫到你
 
幫我看一個這種自訂progressbar是怎實現的?效果見圖

不知道去問問別人
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.