动画号码改变

时间:2010-10-29 08:17:53

标签: android uiviewanimation

我想构建一个组件,它能够以旧模拟汽车计数器的样式显示最多5位数的整数,并为数字变化设置动画。

看起来像是这样......

alt text

我试过搜索这类例子,但到目前为止我找不到任何东西。

在您看来,实现这一目标的最佳方法是什么?

我查看了iphone闹钟时间选择器,据我所知,只有固定的背景,他们将数字推入或推出视图。但是如何在这种情况下放置数字并将它们引用到特定值?

TNX。

1 个答案:

答案 0 :(得分:1)

您可以尝试创建自己的视图,扩展视图并覆盖onDraw()。 在这里,您可以使用位图中的数字行,并根据您希望显示的数字编辑它们的位置。 不要忘记在设置新数字后重新绘制视图时调用invalidate()。

我将粘贴一个包含项目开头的示例。 位图编号是垂直图像,编号为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();
    }


}