2014-07-07 13 views
5

Ich meine diese:Gibt es eine vordefinierte Ressource/Widget für die "nette" unbestimmte Fortschrittsanzeige in Android Wear?

enter image description here

(nicht so schön in der einzigen Screenshot aussehen, aber es ist viel besser als der Standardunbestimmte Fortschritt - in der Tat ist seine Form und Animation ziemlich ähnlich wie die neue "Material" unbestimmter Fortschritt in Android L enthalten, und es ändert sich die Farben).

Es gibt keine Unterschiede in styles.xml zwischen den Plattformen 19 und 20, und während es eine neue styles_micro.xml gibt, scheint es dies nicht zu enthalten.

Antwort

7

Benötigt das gleiche wie Sie. Nicht sicher, ob Sie eine Lösung gefunden haben, die Teil von Android ist. Da ich keine Lösung gefunden habe, habe ich meine eigene gebaut. Es ist nicht perfekt, aber solange man es nicht Frame für Frame studiert, sollte es richtig aussehen.

Ich habe es als seine eigene Sicht erstellt. Der Code ist nicht perfekt und wenn jemand es verbessern möchte, gehen Sie voran.

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; 
     } 
    } 
} 

Ich hoffe, das kann jemandem helfen. Sie könnten weitere Eigenschaften hinzufügen, wenn Sie möchten, aber das ist eine Art der minimalen Lösung, die ich fand, funktionierte.

+0

Sieht erstaunlich aus. Danke fürs Teilen :-) –

+0

Großartig! Ich mag es mehr als das Standard-Lollipop! –