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:
ale układ nie jest zgodny z oczekiwaniami, wygląda następująco:
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 № 1Być 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:
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.