그리 어렵지는 않지만 올바른 위치에 드로어 블을 놓아 두십시오. 그러나 강력한 위젯을 만들고 싶다면 더 많은 고려와 계산이 필요합니다.
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();
}
}
"디지털 숫자"와 "그래픽 숫자"는 무엇을 의미합니까? – user1118321
히야, score = Integer.toString (score); canvas.drawText (점수, 10, 10, 페인트); 텍스트 기반 숫자 인 drawText 대신 그래픽 점수 번호를 그립니다. 예 : 0-9의 숫자가 png 파일의 그래픽 형식으로 미리 그려지고 점수에 따라 캔버스에 그려야한다고 가정 해 봅시다. 점수가 521 일 때 정확한 프레임을 선택하여 캔버스에 그리는 방법은 무엇입니까? 전에는 해본 적이 없으며, 깨끗한 방법이 있다고 생각합니다. pls가 그 배후의 논리를 토론한다면, tnx. – GameBug