La aplicación se bloquea al escalar el mapa de bits en lienzo
Dibujo de texto en Bitmap
de Bitmap
public Bitmap textAsBitmap(String text, float textSize, int textColor) { m_paint.setTextSize(textSize); m_paint.setColor(textColor); m_paint.setTextAlign(Paint.Align.LEFT); int width = (int) ( m_paint.measureText(text) + 0.5f); // round float baseline = (int) (- m_paint.ascent() + 0.5f); // ascent() is negative int height = (int) (baseline + m_paint.descent() + 0.5f); final Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444); canvas1.setBitmap(image); canvas1.drawText(text, 0, baseline, m_paint); return image; }
Paso 2 – Lona de dibujo
- mapa de bits de Android - mejores prácticas
- ¿Por qué el tamaño de mapa de bits es más grande en la memoria que en el disco en Android?
- Android: ¿La manera más fácil de hacer que un WebView muestre un mapa de bits?
- Android: los mapas de bits cargados desde la galería se giran en ImageView
- ¿Cómo adjuntar la imagen de drawable a gmail?
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); if (CustomTextview.GetDB().size() != 0) { for (CustomTextview textview : CustomTextview.GetDB()) { scale = textview.GETSCALE(); final Bitmap bitmap= textAsBitmap(textview.text,textview.size*scale,textview.color); if (bitmap!=null) canvas.drawBitmap(bitmap, textview.X, textview.Y, textview.paint); } } canvas.restore(); }
Estoy utilizando el oyente de escala para escalar el mapa de bits. Pero cuando la escala, se cuelga después de 5 a 10 minutos ..
- Impresión POS / ESC Apex3 image SOS
- ¿Hay una manera de fijar el backgound de la barra de acción por la imagen en androide?
- Android: BitmapDrawable.Draw (lienzo) no parece funcionar
- llamada a Bitmap.compress no devuelve - y ninguna excepción
- Extremadamente lento nSyncAndDrawFrame al dibujar grandes mapas de bits
- Android - Excepción de memoria
- Recortar una transformación de perspectiva de la imagen en Android
- Cómo obtener un mapa de bits de VectorDrawable
Simplemente puede dibujar texto directamente en la lona sin tener que crear primero un mapa de bits.
Para ello, crear una pintura con la configuración correcta, calcular cuán grande será su texto cuando se dibuja y, a continuación, dibujar el texto directamente en el lienzo.
Paint textPaint = new Paint(); textPaint.setColor(Color.WHITE); textPaint.setAntiAlias(true); textPaint.setFakeBoldText(true); textPaint.setStyle(Paint.Style.FILL); textPaint.setTextAlign(Paint.Align.CENTER); textPaint.setTextSize(30f); String myText = "This is a test"; Rect textBounds = new Rect(); textPaint.getTextBounds(myText, 0, myText.length(), bounds); canvas.drawText(myText, 0, myText.length() rect.width()/2, rect.height()/2, textPaint);
El código anterior dibujará el texto centrado, pero usted puede cambiar fácilmente esto para caber sus propias necesidades.
Usted puede intentar esto.
android:largeHeap="true"
Dentro de la aplicación en su AndroidMenifest.xml. como
<application android:largeHeap="true" > </application>
Esperemos que funcione correctamente. Gracias
La razón por la que se cuelga es probablemente porque crear una gran cantidad de mapas de bits de esa manera causará rápidamente fuera de la memoria. Si realmente necesita un mapa de bits, puede crear un único mapa de bits y volver a utilizarlo. Mejor es probablemente como otra solución sugerida para usar api de lienzo directamente. Incluso puede utilizar una sola instancia de Paint para evitar sobrecarga de memoria.
- Cómo utilizar la API de malla experimental con Project Tango
- Android APK no instalado en el dispositivo