質問

古いアナログカーカウンターのスタイルで最大5桁の整数を表示し、数字の変更をアニメーション化できるコンポーネントを構築したいと思います。

それは多分このように見えます...

alt text

このような例を探してみましたが、これまで何も見つかりませんでした。

あなたの意見では、これを達成するための最良のアプローチは何ですか?

私はiPhoneアラームタイムピッカーを見ましたが、私が知る限り、固定された背景しか存在しないことを知ると、彼らは数字をビューの内外に押し出しました。しかし、この場合に数字を配置して特定の値に参照するにはどうすればよいですか?

TNX。

役に立ちましたか?

解決

独自のビューを作成し、ビューを拡張し、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();
    }


}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top