¿Cómo poner el texto en un dibujable?

Estoy intentando crear un drawable sobre la marcha para utilizar como fondo para un linearlayout de encargo. Necesita tener marcas de hash y tales (no es gran cosa), pero también tiene números de etiquetado de lo que las marcas hash (como una regla). Sé que sólo puedo crear elementos de texto y ponerlos dentro de la linea lineal y sólo tienen las marcas hash en el dibujable, pero estoy esperando tenerlos dentro de la drawable también, así que no tengo que hacer cálculos de medición dos veces.

He leído el libro "Professional Android 2 Application Development" (por Reto Meier). Entre otros, contiene un proyecto de ejemplo en el que se crea una aplicación de brújula simple donde se "dibuja" texto, marcadores, etc.

La breve explicación es que creas una clase que extiende la clase android.view.View y reemplaza al onDraw(Canvas) .

Todo el código fuente del libro está disponible para su descarga aquí: http://www.wrox.com/WileyCDA/WroxTitle/Professional-Android-2-Application-Development.productCd-0470565527,descCd-DOWNLOAD.html . Si descarga el código y mira dentro del proyecto llamado "Capítulo 4 Compass", creo que encontrarías lo que buscas 🙂

He aquí un breve ejemplo de un TextDrawable que funciona como un TextDrawable normal, pero le permite especificar texto como la única variable de constructor:

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

Mirando la respuesta de Plowman y tratando de ajustarla a mis necesidades me topé con una clase que se utiliza para la cámara en este enlace

Aquí está el código de la clase TextDrawable . Parece bastante simillar con Plowmans pero para mí funciona mejor:

 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); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.