2014-07-07 23 views
5

voglio dire questo:Esiste una risorsa/widget precostruito per l'indicatore di progresso indeterminato "bello" in Android Wear?

enter image description here

(non sembra così bello nel singolo screenshot, ma è molto meglio di quanto il progresso indeterminata di default - infatti la sua forma e l'animazione è piuttosto simile a quello nuovo avanzamento indeterminato "Materiale" incluso in Android L, più cambia colore).

Non ci sono differenze nello styles.xml tra le 19 e le 20 piattaforme e mentre c'è un nuovo styles_micro.xml, non sembra includerlo.

risposta

7

Necessario la stessa cosa di te. Non sono sicuro se hai trovato una soluzione che fa parte dell'usura Android. Dal momento che non ho trovato una soluzione, l'ho costruita da sola. Non è perfetto ma finché non lo si studia fotogramma per fotogramma dovrebbe apparire corretto.

L'ho creato come se fosse una vista personale. Il codice non è perfetto e se a qualcuno piace migliorarlo vai avanti.

public class ProgressView extends ProgressBar { 
    RectF rectF; 
    Paint p; 
    int start = 0; 
    int maxvalue = 320; 
    int value = 320; 
    int[] currentColor = {0,0,0}; 
    boolean reverse = false; 
    int nextcolor = 1; 

    final int[][] colors = { 
     {224,187,63}, 
     {224,46,25}, 
     {39,105,227}, 
     {51,130,49} 
    }; 

    public ProgressView(Context context) { 
     super(context); 
     init(); 
    } 

    public ProgressView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public ProgressView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init(){ 
     p = new Paint(); 
     p.setStrokeWidth(6); 
     p.setStrokeCap(Paint.Cap.ROUND); 
     p.setAntiAlias(true); 
     p.setStyle(Paint.Style.STROKE); 
     p.setColor(Color.argb(255,colors[0][0], colors[0][1], colors[0][2])); 
     currentColor = Arrays.copyOf(colors[0], colors[0].length); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     rectF = new RectF(0+5, 0+5, w-5, h-5); 
    } 

    @Override 
    protected void onDraw(Canvas c){ 
     if(reverse) 
      start += 15; 
     else 
      start += 5; 

     if(start == 360){ 
      start = 1; 
     } 
     if(!reverse) 
      value -= 10; 
     else 
      value += 10; 
     if(value == 0 || value == maxvalue){ 
      reverse = !reverse; 
     } 
     transformColor(); 
     p.setColor(Color.argb(255,currentColor[0], currentColor[1], currentColor[2])); 
     c.drawArc(rectF, start, maxvalue - value, false, p); 
     invalidate(); 
    } 

    private void transformColor(){ 
     changeColors(0); 
     changeColors(1); 
     changeColors(2); 
     if(currentColor[0] == colors[nextcolor][0] && currentColor[1] == colors[nextcolor][1] && currentColor[2] == colors[nextcolor][2]){ 
      if(nextcolor == 3) 
       nextcolor = 0; 
      else 
       nextcolor++; 
     } 
    } 

    private void changeColors(int i){ 
     if(currentColor[i] > colors[nextcolor][i]){ 
      currentColor[i] -= 1; 
     } 
     if(currentColor[i] < colors[nextcolor][i]){ 
      currentColor[i] += 1; 
     } 
    } 
} 

Spero che questo possa aiutare qualcuno. Potresti aggiungere altre proprietà se vuoi, ma questa è la soluzione minima che ho trovato funzionante.

+0

Sembra incredibile. Grazie per aver condiviso :-) –

+0

Great! Mi piace più del default di Lollipop! –