2012-03-29 168 views
19

我想自定義狀態欄,以便它看起來這樣的形象:enter image description hereAndroid的進度UI自定義佈局

但是,一個良好的幾個小時我只有後一個狀態欄,與我只需要在後臺(圖像2):enter image description here

當前代碼我是: XML佈局:

<ProgressBar 
       android:id="@+id/pBarOverallStatus" 
       style="?android:attr/progressBarStyleHorizontal" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_marginLeft="10dip" 
       android:layout_marginRight="10dip" 
       android:layout_weight="94" 
       android:indeterminateOnly="false" 
       android:max="100" 
       android:progressDrawable="@drawable/progress_bar_states" > 
      </ProgressBar> 

的progress_bar_states.xml:

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

    <!-- <item android:id="@android:id/progress"> 
     <bitmap 
      android:gravity="center" 
      android:src="@drawable/progressbar_progressing" /> 

     <corners android:radius="10dp" /> 
    </item> 
    --> 

</layer-list> 

刪除註釋,其中proressbar_progressing看起來像 enter image description here 然後我有東西有點難看,因爲沒有角落。 enter image description here

我加入從代碼的背景下,這樣的:

overallStatus = (ProgressBar) findViewById(R.id.pBarOverallStatus); 
Resources res = getResources(); 
overallStatus.setBackgroundDrawable(res.getDrawable(R.drawable.progressbar_background)); 
overallStatus.setProgress(50); 

我試圖角落添加到圖像,但沒有運氣。 有沒有人知道我在做什麼錯在這裏?或者我錯過了什麼? 另外,你有什麼想法,我怎麼可以添加左,右環?資源: enter image description here

+1

我不知道下面的鏈接將是任何幫助,但我已經找到了很多關於谷歌的帖子問同樣的問題,所以希望您可以從中汲取靈感的http:/ /blog.mediarain.com/2011/04/android-custom-progressbar-with-rounded-corners/ – Mimminito 2012-03-29 08:34:45

+0

謝謝!我沒有得到我需要的確切結果,但我越來越接近。謝謝! – gunar 2012-03-30 17:07:15

回答

28

的解決方案(感覺怪異的回答你自己): 首先,一個問題米是進展drawable有不同的背景大小(愚蠢的我!)。此外,對於可繪製的進度,需要一個剪貼片xml。喜歡的東西progressbar_progress_clip.xml:

<?xml version="1.0" encoding="utf-8"?> 
<clip 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/progressbar_progressing" 
    android:clipOrientation="horizontal" 
    android:gravity="left"/> 

然後,添加在相對佈局的進度條和兩個圖像,使圖像可以在狀態欄後得出。就像這樣:

<RelativeLayout 
       android:id="@+id/relativeLayout1" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_marginLeft="10dip" 
       android:layout_marginRight="10dip" 
       android:layout_weight="94" > 

       <ProgressBar 
        android:id="@+id/pBarOverallStatus" 
        style="?android:attr/progressBarStyleHorizontal" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_marginBottom="2dp" 
        android:layout_marginTop="2dp" 
        android:indeterminateOnly="false" 
        android:max="100" 
        android:progressDrawable="@drawable/progressbar_progress_clip" > 
       </ProgressBar> 

       <ImageView 
        android:id="@+id/ringLeft" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent" 
        android:layout_alignParentLeft="true" 
        android:layout_centerVertical="true" 
        android:layout_marginLeft="7dp" 
        android:contentDescription="@string/status_bar_ring" 
        android:src="@drawable/status_bar_ring" /> 

       <ImageView 
        android:id="@+id/ringRight" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent" 
        android:layout_alignParentRight="true" 
        android:layout_centerVertical="true" 
        android:layout_marginRight="7dp" 
        android:contentDescription="@string/status_bar_ring" 
        android:src="@drawable/status_bar_ring" /> 
      </RelativeLayout> 

謝謝,夥計們!

+3

完美地工作,謝謝。順便說一句,回答你自己的問題是絕對好的:) – 2013-01-15 14:38:38

0

首先創建一個新的可繪製的XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <corners 
     android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 

</shape> 

然後在你的佈局,下面的屬性添加到您的進度條:

android:background="@drawable/the_file_you_previously_created"

+0

我試過了你的方法,屏幕上沒有任何東西出現......你能詳細解釋一下你的解決方案嗎? – gunar 2012-03-30 17:06:22

0

您可以使用ImageView製作一個FrameLayout來保存繪圖並將其alpha值設置爲較低值。然後在同一個FrameLayout中用ClipDrawable創建一個ProgressBar。並在您的進度更新中設置ClipDrawable的值。

代碼:

<FrameLayout 
     android:layout_gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    <ProgressBar 
     android:max="100" 
     android:id="@+id/progress_bar" 
     android:layout_gravity="center" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:progressDrawable="@drawable/custom_progress_image" 
     android:layout_marginRight="5dp" /> 

     <ImageView 
      android:alpha="0.4" 
      android:src="@drawable/app_logo" 
      android:layout_gravity="center" 
      android:layout_width="200dp" 
      android:layout_height="200dp" /> 
</FrameLayout>