Вопрос

Я хочу построить компонент, который сможет показать целочисленное число максимально 5 цифр в стиле старых аналоговых счетчиков автомобилей и анимирует изменение цифры.

Это выглядит что-то вроде этого, может быть ...

alt text

Я попробовал искать эту рода примеров, но я не мог ничего найти.

По вашему мнению, какой лучший подход к достижению этого?

Я посмотрел на пикур тревоги iPhone Time, и, насколько я могу сказать, есть только фиксированный фон, и они нажимают числа в или вышке. Но как мне разместить цифры в этом случае и ссылаться на их конкретное значение?

TNX.

Это было полезно?

Решение

Вы можете попытаться создать свой собственный вид, расширяя вид и переопределить OnDaw (). Здесь вы можете использовать строки номеров в растровых изображениях и редактирование их позиции на основе номера, которое вы хотите показать. Не забудьте позвонить в недействителен () после установки новых чисел для перерисования вида.

Я вставлю пример, содержащий начало для вашего проекта. Номер растрового изображения - это вертикальное изображение с числами от 1 до 9 (и 0 &.)

Бывший.

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


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top