Estoy tratando de crear un dibujable sobre la marcha para usar como fondo para una distribución lineal personalizada. Necesita tener marcas de almohadilla y eso (no es gran cosa), pero también tiene números que marcan las marcas de almohadilla (como una regla). Sé que puedo simplemente crear elementos de texto y ponerlos dentro de la distribución lineal y solo tengo las marcas de almohadilla en el dibujo, pero espero tenerlos también dentro del dibujo, así que no tengo que hacer cálculos de medición dos veces.¿Cómo poner el texto en un dibujable?
Respuesta
He leído el libro "Desarrollo de aplicaciones Professional Android 2" (por Reto Meier). Entre otros, contiene un proyecto de ejemplo que se puede crear una aplicación simple brújula en el que "dibuja" el texto, marcadores, etc.
La breve explicación es que se crea una clase que amplía la clase android.view.View
y reemplaza el método 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 Brújula", creo que encontrará lo que está buscando :)
Aquí hay un breve ejemplo de TextDrawable
que funciona como un dibujo normal pero permite especifica el texto como la única variable 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;
}
}
¡Súper, justo lo que necesitaba! – Bostone
funciona bien, el único problema es que el texto se muestre de ancho. Estoy dibujando texto en (x, y) de acuerdo con el progreso. donde x = progreso * seekBar.getWidth()/seekBar.getMax() e y = seekBar.getHeight()/2. ¿Puede por favor decirme dónde está mi error para calcular las coordenadas x, y? –
ok, funciona perfecto. ese fue mi error He puesto relleno (izquierdo y derecho) de la barra de búsqueda. Gracias labrador. –
en cuanto a la respuesta de labrador y tratando de adaptarse a mis necesidades me stumpled en una clase que se utiliza para Camera in this link
Aquí está el código de la TextDrawable Class. 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);
}
}
Me parece un poco cortada y no centrada correctamente: https://i.stack.imgur.com/2xRyf.png. ¿Puedes verificar el código otra vez? –
@androiddeveloper lamentablemente no puedo por el momento. –
Lástima. Tu código es el único que encontré decente. –
- 1. cómo poner texto en el borde
- 2. dibujable == dibujable?
- 3. ¿Cómo poner texto sobre imágenes en html?
- 4. Crear carpeta en dibujable
- 5. cómo poner texto en el medio de una imagen
- 6. ¿Cómo poner en cursiva el texto hacia atrás?
- 7. ¿Cómo establecer el valor alfa para dibujable en un StateListDrawable?
- 8. ¿Poner imagen de fondo sobre el texto?
- 9. Cómo poner una imagen de la carpeta dibujable al archivo HTML
- 10. Dónde poner archivos de texto en el directorio de Android
- 11. Modificar el color de un androide dibujable
- 12. ¿Cómo hago un dibujable desde múltiples imágenes?
- 13. ¿Cómo poner timedelta en el modelo django?
- 14. Poner el texto en los ejes no activos en MATLAB
- 15. ¿Cómo poner un carácter Unicode en XAML?
- 16. C# string Poner en Cuadro de texto
- 17. Crear un archivo desde dibujable
- 18. Dibujar múltiples rectángulos en un xml dibujable
- 19. Cómo poner una vista en el paquete
- 20. Android: Personalizar las pestañas en el estado: ¿Cómo puedo hacer que un selector sea un dibujable
- 21. ¿Cómo poner el contenido de un ByteBuffer en un OutputStream?
- 22. Convertir cadena en dibujable
- 23. Cómo proteger un recurso dibujable en la aplicación de Android
- 24. Cómo poner el carácter & en un xml en android correctamente
- 25. Cómo poner el fondo de teclado en Android
- 26. Cómo establecer el tamaño dibujable en la lista de capas
- 27. ¿Cómo poner el texto de un JLabel dentro de su icono
- 28. cómo poner en negrita para cierta palabra en el campo de texto?
- 29. cómo poner un xml en couchDB?
- 30. ¿Cómo poner un contenedor en mvnrepository.com?
canvas.drawText (...) era exactamente lo que estaba buscando. ¡Gracias! – atraudes