Question

Je veux construire un composant qui sera en mesure de montrer un nombre entier maximum 5 chiffres dans le style des anciens compteurs de voiture analogique et animer le changement de chiffre.

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

text alt

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

à votre avis, quelle est la meilleure approche pour y parvenir?

i regarda le sélecteur de temps d'alarme iphone et pour autant que je peux dire qu'il n'y a qu'un fond fixe et ils poussent les numéros ou la vue. mais comment puis-je placer les chiffres dans ce cas et les référence à une valeur particulière?

TNX.

Était-ce utile?

La solution

Vous pouvez essayer de créer votre propre point de vue, vue extension et primordial onDraw (). Ici, vous pouvez utiliser des lignes de numéros en bitmaps et éditer leur position en fonction du nombre que vous souhaitez afficher. Ne pas oublier d'appeler Invalidate () après avoir défini les nouveaux numéros de 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 de 1 à 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();
    }


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top