我一直在做一个小游戏来进一步学习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();
}
}