/ / rozciągalne źródło obrazu dla progressBar - Android, Android-Drawable, Android-Progress

rozciągalne źródło obrazu dla progressBar - android, android-drawable, android-progressbar

Pasek postępu utworzyłem w pliku activity_main.xml w następujący sposób:

 <ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="25dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/myprogdraw" />

następnie utworzyłem plik myprogdraw.xml w folderze do rysowania, aby kontrolować projekt brogressBar w następujący sposób:

<item android:id="@android:id/background">
<shape>
<gradient
android:angle="180"
android:centerColor="#ddd"
android:endColor="#888"
android:startColor="#42a" />
</shape>
</item>
<item android:id="@android:id/progress">
<bitmap
android:src="@drawable/prog"
android:tileMode="repeat" />
</item>

i użyj do tego następującego obrazu:

wprowadź opis obrazu tutaj

ale układ nie jest zgodny z oczekiwaniami, wygląda następująco: wprowadź opis obrazu tutaj

więc jak mogę sprawić, by mapa bitowa rozciągliwa nie była powtarzalna dla paska postępu?

jak pokazano powyżej, użyty obraz to 9 łatek, ale nic się nie zmieniło.

Odpowiedzi:

0 dla odpowiedzi № 1

Być może z tego powodu korzystasz z bitmap element.

Rozwiązanie 1:

Usuń ten plik (który naprawdę nie potrzebuję): myprogdraw.xml.
Po prostu użyj tego: prog.9.png

Lubię to:

android:progressDrawable="@drawable/prog"

Uważaj podwójne przedłużenie w pliku poprawki 9.

[EDYTOWAĆ]

Rozwiązanie 2:

Jeśli chcesz również zachować drugi gradient jako tło, zmień bitmap element do a nine-patch jeden:

<item android:id="@android:id/progress">
<nine-patch
android:src="@drawable/prog"
android:dither="true"
/>
</item>

[EDIT 2]

Rozwiązanie 3:

Użyj gradientu zamiast 9 łatki.

<item android:id="@android:id/progress">
<shape>
<gradient
android:angle="180"
android:centerColor="#fe0"
android:endColor="#f00"
android:startColor="#0f0" />
</shape>
</item>

0 dla odpowiedzi nr 2

w końcu to rozgryzłem i mam nadzieję, że moje rozwiązanie pomoże komuś innemu.

można to zrobić za pomocą elementu clip zamiast elementu bitmap, a oto plik xml dla listy warstw

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@android:id/background">
<shape>
<gradient
android:angle="0"
android:centerColor="#ddd"
android:endColor="#999"
android:startColor="#999" />

<corners android:radius="5dp" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip android:drawable="@drawable/progress" />

<shape>
<corners android:radius="5dp" />
</shape>
</item>

</layer-list>

jako szybki test zbudowałem nowy pusty projekt, następnie dodałem pasek postępu i edytuję tekst, aby użyć go do kontrolowania wartości paska postępu, wywołując metodę setProgress po kliknięciu przycisku nowy:

wynik dokładnie taki, jaki chciał i jak pokazano poniżej:

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Zauważyłem, że zaokrąglone rogi zastosowano w tle, ale nie zastosowano w miarę postępu, może to być inny problem i trzeba będzie rozwiązać inne pytanie, ale na razie jest to w porządku.