将数字替换为画布上的图形数字



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

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

好吧,假设我得了 1240 分,我希望能够在 Canvas 上用图形数字替换这些数字。

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

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

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

相关内容

  • 没有找到相关文章