2010-10-29 5 views
0

Je veux construire un composant qui sera capable d'afficher un nombre entier max 5 chiffres dans le style des anciens compteurs de voitures analogiques et animer le changement de chiffre.changement de numéro d'animation

qui ressemble à quelque chose comme ça peut-être ...

alt text

J'ai essayé la recherche de ce peu d'exemples, mais je ne pouvais pas trouver quoi que ce soit à ce jour.

Selon vous, quelle est la meilleure approche pour y parvenir? J'ai regardé le sélecteur d'heure de l'alarme de l'iPhone et pour autant que je sache, il n'y a qu'un arrière-plan fixe et ils poussent les numéros dans ou hors de la vue. mais comment puis-je placer les chiffres dans ce cas et les référencer à une valeur particulière?

tnx.

Répondre

1

Vous pouvez essayer de créer votre propre vue en étendant la vue et en remplaçant onDraw(). Ici, vous pouvez utiliser des rangées de nombres dans des bitmaps et modifier leur position en fonction du nombre que vous souhaitez afficher. N'oubliez pas d'appeler invalidate() après avoir défini de nouveaux numéros pour redessiner la vue.

Je vais coller un exemple contenant un début pour votre projet. Le numéro de bitmap est une image verticale avec des nombres compris entre 1 et 9 (et 0 &.)

Ex.

class TickerView extends View { .. 


public void setDouble(double d) { 
     value = d; 
     invalidate(); 
    } 
     protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     int startx = 0; 
     int starty = 0; 
     DecimalFormat df = new DecimalFormat("#0.00"); 
     String str = df.format(value); 
     String original = Double.toString(value); 

     Bitmap nums = BitmapFactory.decodeResource(context.getResources(), 
       R.drawable.numbers); 

     for (int i = 0; i < str.length(); i++) { 
      int num = 0; 
      try { 
       num = Integer.parseInt(str.charAt(i) + ""); 
      } catch (Exception e) { 
       num = 10; 
      } 
      int numbefore = 0; 
      try { 
       numbefore = Integer.parseInt(original.charAt(i -1) + ""); 
      } catch (Exception e) { 
       numbefore = 0; 
      } 

      canvas.drawBitmap(nums, startx + (i * 40), (starty + 40) 
        - (num * 50) + (numbefore), paintY); 

     } 
     paintY.setStrokeWidth(10); 
     canvas.drawLine(startx, starty+36, startx + (str.length() * 40), starty+36, 
       paintY); 
     canvas.drawLine(startx, starty + 90, startx + (str.length() * 40), 
       starty + 90, paintY); 
     invalidate(); 
    } 


}