2012-01-06 23 views
6

Chcę zrobić pionowy pasek postępu w Androidzie podczas wykonywania określonej akcji. Postęp powinien rozpoczynać się od 1. ikony i kończyć w końcowej ikonie, która stale się rozwija. Nie mogę znaleźć sposobu, aby to zrobić.Pionowy pasek postępu w Androidzie

jeśli każdy organ może pomóc dostać jedną nogą w drzwiach. Będę bardzo zobowiązany.

+1

możliwe duplikat [Androida - ustawić ProgressBar się pionowy pasek zamiast poziomych] (http://stackoverflow.com/questions/3926395/android-set-a-progressbar-to- be-a-vertical-bar-in-of-horizontal) –

+3

W rzeczywistości nie jest to duplikat tego. –

Odpowiedz

14

To trochę trudno powiedzieć przejście starasz się próbować między tymi dwoma obrazami. A więc chcesz zacząć od obrazu czarno-białego, ale czy przechodzi on od czarno-białego do kolorowego przez krzyżowanie, czy też powoli chcesz zastosować fragmenty kolorowego obrazu od dołu do góry nad fragmentem czarno-białym?

Jeśli jest to Twój wybór, twój rzeczywisty obraz będzie składał się z dwóch rysunków znajdujących się wewnątrz <layer-list>. Jeden statyczny, a drugi reprezentujący ClipDrawable, który ujawni część kolorowego obrazu na podstawie jego wartości poziomu. Na przykład, utworzyć plik XML:

RES/rozciągliwej/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> 

następnie ustawić że Drawable na czymś jak ImageView aby wyświetlić postęp i zmień wartość z wywołań setLevel() , tj.

//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); 

Poziomy kreślarskie są domyślnie ustawione od 0 do 10 000, aby reprezentować w pełni przycięte do pełnego ujawnienia.

HTH

+0

przygwoździłeś go, chcę tego ostatniego wyboru (jak na przykład ekran ładowania God of War na ich stronie internetowej). Zdecydowanie wypróbuję Twoją sugestię, dziękuję bardzo. – windwaker

+0

Mam do czynienia z problemem. W działaniu testowym używam pojedynczego widoku obrazu i pliku progress_background.xml zgodnie z powyższym opisem. Po ustawieniu zmiennej setImageResource i ustawieniu poziomu statycznego na 6000, otrzymuję pusty ekran. Bez śladu żadnego obrazu.Teraz, jeśli usunę statyczny "flame_bw" z progress_background.xml i zatrzymam tylko jeden element, wtedy będę mógł zobaczyć przycięty obraz. Nie mam pojęcia, dlaczego nic nie pokazuje podczas używania 2 elementów :( – windwaker

+0

Zauważyłem mały błąd w moim XML, który mógł Cię zainicjować. Tag '' wymaga atrybutu 'src' w przeciwieństwie do atrybutu' drawable'. Zauważyłem również, że będziesz chciał użyć również atrybutu 'gravity', aby wywołać go od dołu, domyślnie odsłania się od centrum Odpowiedź została edytowana – Devunwired

0

Najlepszym sposobem na zrobienie tego jest użycie oryginalnej bitmapy jako tła, a następnie narysowanie nad nią gotowego obrazu od dołu. W ten sposób nie potrzebujesz wielu różnych obrazów - po prostu przyrostowo narysuj gotowy obraz. Myślę, że można to zrobić z czymś tak:

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

Dzięki, ale zastanawiam się, czy będzie działać na pasku postępu w powiadomieniach, a także – windwaker

+0

Nie będzie to działać, chyba że wszystkie elementy zostaną ręcznie połączone. Ta metoda jest bardziej zrób to sam. Rozwiązanie Devunwired jest lepsze. –