Pregunta

Quiero construir un componente que va a ser capaz de mostrar un número entero de un máximo de 5 dígitos en el estilo de los viejos contadores de automóviles analógica y animar el cambio de dígito.

que se ve algo como esto tal vez ...

text alt

He intentado buscar un poco de este ejemplos, pero no pude encontrar nada hasta ahora.

En su opinión, ¿cuál es la mejor manera de lograr esto?

i se veía en el momento selector de alarma iPhone y por lo que puedo decir que sólo hay un fondo fijo y empujan los números dentro o fuera de la vista. pero ¿Cómo puedo colocar los dígitos en este caso y que la referencia a un valor particular?

TNX.

¿Fue útil?

Solución

Se puede tratar de crear su propio punto de vista, que se extiende la vista y anulando onDraw (). Aquí se puede utilizar filas de números en mapas de bits y la edición de su posición en base al número que desea mostrar. No se olvide de llamar invalidate () después de establecer nuevos números para volver a dibujar la vista.

Me pegará un ejemplo que contiene un comienzo para su proyecto. El número de mapa de bits es una imagen vertical con los números de 1-9 (y 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();
    }


}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top