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

 @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 ..

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.

  • Android: gira la imagen en ImageView por 90degrees pero sin demora
  • Android rotar mapa de bits sin hacer una copia
  • Cómo guardar un mapa de bits en el almacenamiento interno
  • Android Native crash en /system/lib/libskia.so
  • GetDrawingCache devuelve siempre el mismo Bitmap
  • Bitmap demasiado grande para ser cargado en una textura
  • ¿Cómo posiciono mi mapa de bits en el lienzo usando una matriz?
  • ¿Cuál es el tamaño óptimo de bitmap para las carpetas ldpi / mdpi / hdpi / xhdpi extraíbles?
  • Tamaño de imagen de mapa de bits de Android
  • Guardar un edittext en un mapa de bits
  • Reciclaje de bitmaps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.