Domanda

Voglio costruire un componente che sarà in grado di mostrare un numero intero max 5 cifre nello stile dei vecchi contatori auto analogica e animare il cambiamento cifre.

che sembra qualcosa di simile forse ...

alt text

Ho provato a cercare per questo genere di esempi, ma non ho trovato nulla finora.

secondo voi qual è l'approccio migliore per raggiungere questo obiettivo?

Ho guardato il selettore ora di allarme iphone e per quanto posso dire c'è solo uno sfondo fisso e spingono i numeri dentro o fuori la vista. ma come faccio a piazzare le cifre in questo caso e li riferimento ad un valore particolare?

tnx.

È stato utile?

Soluzione

Si può cercare di creare il proprio punto di vista, che si estende vista e sovrascrivendo OnDraw (). Qui è possibile utilizzare file di numeri in bitmap e modificare la loro posizione in base al numero che si desidera mostrare. Non dimenticare di chiamare invalidate () dopo aver impostato nuovi numeri per ridisegnare la vista.

I incollerà un esempio che contiene un inizio per il progetto. Il numero bitmap è un'immagine verticale con numeri da 1-9 (0 ed e.)

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


}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top