如何把文本放在drawable中?

我正在尝试创build一个可拖动的用作自定义线性布局的背景。 它需要有散列标记等(没有什么大不了的),但也有数字标记什么是散列标记(如统治者)。 我知道我可以创build文本元素,并将它们放在linearlayout中,并且只在drawable中有散列标记,但是我希望它们也在drawable中,所以我不必做两次测量计算。

Solutions Collecting From Web of "如何把文本放在drawable中?"

我已阅读“专业Android 2应用程序开发”(Reto Meier)一书。 其中包含一个示例项目,您可以在其中创build一个简单的指南针应用程序,在其中“绘制”文本,标记等

简单的解释是你创build了一个扩展android.view.View类的类,并覆盖了onDraw(Canvas)方法。

本书的所有源代码可在此处下载: http : //www.wrox.com/WileyCDA/WroxTitle/Professional-Android-2-Application-Development.productCd-0470565527,descCd-DOWNLOAD.html 。 如果你下载代码,看看名为“Chapter 4 Compass”的项目,我相信你会发现你在找什么:)

下面是一个TextDrawable的简单例子,它像一个普通的drawable一样工作,但是可以指定文本作为唯一的构造函数variables:

 public class TextDrawable extends Drawable { private final String text; private final Paint paint; public TextDrawable(String text) { this.text = text; this.paint = new Paint(); paint.setColor(Color.WHITE); paint.setTextSize(22f); paint.setAntiAlias(true); paint.setFakeBoldText(true); paint.setShadowLayer(6f, 0, 0, Color.BLACK); paint.setStyle(Paint.Style.FILL); paint.setTextAlign(Paint.Align.LEFT); } @Override public void draw(Canvas canvas) { canvas.drawText(text, 0, 0, paint); } @Override public void setAlpha(int alpha) { paint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { paint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } } 

看着Ploughman的答案,并试图调整到我的需要,我瘫痪了这个链接中用于相机的类

这是来自TextDrawable类的代码。 与Ploughmans看起来相当类似,但对我来说效果更好:

 import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Paint.Align; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.TypedValue; public class TextDrawable extends Drawable { private static final int DEFAULT_COLOR = Color.WHITE; private static final int DEFAULT_TEXTSIZE = 15; private Paint mPaint; private CharSequence mText; private int mIntrinsicWidth; private int mIntrinsicHeight; public TextDrawable(Resources res, CharSequence text) { mText = text; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(DEFAULT_COLOR); mPaint.setTextAlign(Align.CENTER); float textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, DEFAULT_TEXTSIZE, res.getDisplayMetrics()); mPaint.setTextSize(textSize); mIntrinsicWidth = (int) (mPaint.measureText(mText, 0, mText.length()) + .5); mIntrinsicHeight = mPaint.getFontMetricsInt(null); } @Override public void draw(Canvas canvas) { Rect bounds = getBounds(); canvas.drawText(mText, 0, mText.length(), bounds.centerX(), bounds.centerY(), mPaint); } @Override public int getOpacity() { return mPaint.getAlpha(); } @Override public int getIntrinsicWidth() { return mIntrinsicWidth; } @Override public int getIntrinsicHeight() { return mIntrinsicHeight; } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter filter) { mPaint.setColorFilter(filter); } }