Ho un modulo che sto generando dinamicamente dai dati che ricevo da un servizio web. Questo servizio Web fornisce immagini che devono essere utilizzate nella creazione di elementi di input. Sto avendo difficoltà a impostare il progressDrawable
di un RatingBar
. Anche se XML sono in grado di applicare un'immagine personalizzata utilizzando il seguente come progressDrawable
:Costruzione di un RatingBar utilizzando le immagini caricate dal web
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background" android:drawable="@drawable/custom_star" />
<item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/custom_star" />
<item android:id="@+android:id/progress" android:drawable="@drawable/custom_star" />
</layer-list>
dove custom_star
è un'immagine .png semplice, e con @android:style/Widget.RatingBar
come lo stile RatingBar. Questo funziona bene:
ma sto voler cambiare custom_star
dinamicamente.
In codice, ho provato a regolare il drawable progressi usando una bitmap direttamente:
Drawable d = new BitmapDrawable(getResources(), downloadedImage);
ratingBar.setProgressDrawable(d);
e anche con la costruzione di un layer-list
:
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] {
getResources().getDrawable(R.drawable.custom_star),
getResources().getDrawable(R.drawable.custom_star),
getResources().getDrawable(R.drawable.custom_star)
});
layerDrawable.setId(0, android.R.id.background);
layerDrawable.setId(1, android.R.id.secondaryProgress);
layerDrawable.setId(2, android.R.id.progress);
ratingBar.setProgressDrawable(layerDrawable);
Né funziona per me; sia comportare la custom_star
drawable che appare una volta, si estendeva dalle dimensioni del RatingBar
:
Tutte le idee?
Update: risposta
di Luksprog seguito ha fatto un miglioramento, ma sto ancora avere un paio di questioni. Ora, il drawable stella non è allungato e il valore può essere impostato tramite il tocco, ma sembra come così con 3/5 selezionato:
e 5/5 selezionati:
Credo che il ridimensionamento delle immagini possa essere corretto con poche modifiche, ma non sembra che il drawable secondaryProgress
non sia impostato, il drawable utilizzato per le stelle non selezionate in grigio. Senza quello, non è molto utilizzabile.
Grandi cose. Questo è sicuramente funzionante per me, anche se non riesco a ottenerlo per impostare secondaryProgress. Le stelle appaiono quando si fa clic, ma quelle in background non selezionate in grigio non appaiono (sto usando un diverso drawable, R.drawable.star_off). – blork
Mentre la tua soluzione esatta non ha funzionato per me, ho controllato il [codice sorgente Android per ProgressBar] (http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/ android/2.3.3_r1/android/widget/ProgressBar.java /) come hai suggerito, e lo strappo del metodo tileify() ha funzionato benissimo per me. Grazie! – blork
@blork Mi dispiace per il codice che ho postato (non ho avuto molto tempo), non ha replicato completamente quel metodo (in qualche modo ho perso il flag 'clip'). Sono sicuro che sei riuscito anche a far sì che le stelle abbiano le dimensioni corrette. Il 'RatingBar' imposta la sua larghezza moltiplicando la larghezza di una delle bitmap con il numero di stelle (calcolando questo nel metodo' onMeasure' di un 'RatingBar' personalizzato dovrebbe mostrare la giusta quantità di stelle). – Luksprog