2012-01-06 67 views
6

我想在執行特定動作時在android中製作垂直進度條。進展應該從第一個圖標開始,並在最終圖標結束後繼續穩步前進。我似乎找不到辦法。android中的垂直進度條

,如果任何機構可以幫助擋在門外一隻腳。我會非常感激。

+1

可能重複的[Android的? - 設置一個進度條是一個垂直條的而不是水平(http://stackoverflow.com/questions/3926395/android-set-a-progressbar-to-是一個垂直條而不是水平的) – 2012-01-06 20:30:28

+3

它實際上並不重複。 – 2012-01-06 21:05:04

回答

14

這是一個有點分不清你想這兩個圖像之間嘗試的過渡。所以你想從黑白圖像開始,但是它是否通過交叉漸變從B/W轉變爲了彩色,還是你想慢慢地從底部向黑白部分應用彩色圖像?

如果後者是您的選擇,那麼您的實際圖像將包含<layer-list>內的兩個可繪圖。一個是靜態的,另一個表示ClipDrawable,它將基於其級別值顯示彩色圖像的一部分。例如,創建一個XML文件:

RES /繪製/ progress_background.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
    <bitmap android:src="@drawable/ic_launcher_bw"/> 
    </item> 
    <item> 
    <clip 
     android:clipOrientation="vertical" 
     android:gravity="bottom" 
     android:drawable="@drawable/ic_launcher"/> 
    </item> 
</layer-list> 

然後設置Drawable上類似的ImageView顯示進度,並改變與調用setLevel()值,即

//This is any view subclass that you have chosen to do this 
ImageView progress; 

progress.setImageResource(R.drawable.progress_background); 

//Adjust the progress by adjusting the drawable's level 
progress.setImageLevel(500); 
// -- OR -- 
progress.getDrawable().setLevel(500); 

可繪製的級別默認設置爲0到10,000來表示完全剪切以完全顯示。

HTH

+0

你釘了它,我想要後者的選擇(如他們的網站上的戰神加載屏幕)。我肯定會很多嘗試你的建議 – windwaker 2012-01-11 06:37:30

+0

我正面臨一個問題。在測試活動中,我使用單個imageview並使用上面定義的progress_background.xml。設置setImageResource並將setlevel設置爲靜態6000後,我得到一個空白屏幕。沒有任何圖像的痕跡。現在,如果我從progress_background.xml中刪除靜態「flame_bw」,並只保留一個項目,那麼我能夠看到剪輯後的圖像。不知道爲什麼當使用2個項目時它沒有顯示任何內容:( – windwaker 2012-01-12 18:46:55

+0

我注意到我的XML中有一個小錯誤,它可能會讓你失望。''標籤需要'src'屬性而不是'drawable'屬性。另外,我注意到你也想使用'gravity'屬性來使它從底部出現,默認情況下它從中心顯示出來。答案已被編輯。 – Devunwired 2012-01-12 21:18:18

0

我能想到的最好的方法是使用原始位圖作爲背景,然後從底部向上繪製完成圖像的一部分。這樣您就不需要大量不同的圖像 - 只需逐步繪製完成的圖像即可。我認爲它可以用的​​東西就像這樣:

// setup 
// assuming firstImage is the initial one and secondImage is the final one 
int totalHeight = firstImage.getHeight(); 
Canvas canvas = new Canvas(firstImage); 
ImageView imgView = (ImageView)findViewById(R.id.flame_bar_view); 
imgView.setImageBitmap(firstBitmap); 
Rect src = new Rect (0, totalHeight, 
        firstImage.getWidth(), totalHeight); 

// then on each update 
void updateFlameBar(float percentage) { 
    int height = (int)(totalHeight * percentage); 
    src.top = totalHeight - height; 
    canvas.drawBitmap(secondImage, src, src, null); 
} 
+0

謝謝,但我想知道它是否會在通知中的進度條上工作 – windwaker 2012-01-11 06:47:38

+0

不,它不會工作,除非你手動連接所有部分。這種方法更DIY。 Devunwired的解決方案更好。 – 2012-01-11 16:38:50