1

我一直在开发一款小游戏以进一步学习 Android,我有一个关于用图形数字替换数字数字的问题。我厌倦了使用 Canvas.drawText ......

如果数字打印在png图像上,如何创建一个函数来了解在哪个帧之后写入?

好的,假设我的分数是 1240,我希望能够用 Canvas 上的图形数字替换这些数字。

我希望我把我的问题说清楚了,干杯!

4

1 回答 1

1

这不是很难,只需将一些drawables放在正确的位置即可。但是如果你想做一个健壮的小部件,你需要更多的考虑和计算。

public class MTextView extends View {
    public MTextView(Context context) {
        this(context, null);
    }

    public MTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initDrawables();
    }

    private Drawable[] mDigitDrawables = new Drawable[10];
    private String mText = "123";

    private void initDrawables() {
        Resources res = getResources();
        mDigitDrawables[0] = res.getDrawable(R.drawable.digit_0);
        mDigitDrawables[1] = res.getDrawable(R.drawable.digit_1);
        mDigitDrawables[2] = res.getDrawable(R.drawable.digit_2);
        mDigitDrawables[3] = res.getDrawable(R.drawable.digit_3);
        mDigitDrawables[4] = res.getDrawable(R.drawable.digit_4);
        mDigitDrawables[5] = res.getDrawable(R.drawable.digit_5);
        mDigitDrawables[6] = res.getDrawable(R.drawable.digit_6);
        mDigitDrawables[7] = res.getDrawable(R.drawable.digit_7);
        mDigitDrawables[8] = res.getDrawable(R.drawable.digit_8);
        mDigitDrawables[9] = res.getDrawable(R.drawable.digit_9);

        for (int i = 0; i < 10; i++) {
            boundToLeftTop(mDigitDrawables[i]);
        }
    }

    private void boundToLeftTop(Drawable d) {
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int dw = mDigitDrawables[0].getIntrinsicWidth();
        int dh = mDigitDrawables[0].getIntrinsicHeight();
        int width = dw * mText.length() + getPaddingLeft()
                + getPaddingRight();
        int height = dh + getPaddingTop() + getPaddingBottom();
        setMeasuredDimension(resolveSize(width, widthMeasureSpec),
                resolveSize(height, heightMeasureSpec));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.save();
        canvas.translate(getPaddingLeft(), getPaddingTop());
        for (int i = 0; i < mText.length(); i++) {
            int number = Integer.valueOf(mText.charAt(i) - '0');
            Drawable d = mDigitDrawables[number];
            d.draw(canvas);
            canvas.translate(d.getBounds().width(), 0);
        }
        canvas.restore();
    }
}
于 2012-11-28T16:54:13.453 回答