studio sobre programacion herramientas fundamentos con avanzado aplicaciones android image android-edittext capture

android - sobre - Captura todo el contenido de EditText en una imagen



manual de programacion android (1)

Tengo que imprimir el texto completo de un campo de texto en una imagen. El motivo es: tengo que intercambiar mensajes con caracteres UTF-8 no compatibles entre Android y otros clientes web. Por caracteres UTF-8 no soportados me refiero a fuentes perdidas en Android (vea este tema aquí ). Traté de usar el camino directo

Bitmap b; EditText editText = (EditText) findViewById(R.id.editText); editText.buildDrawingCache(); b = editText.getDrawingCache(); editText.destroyDrawingCache();

que funciona como un amuleto hasta que tenga varias líneas: la solución captura solo el texto que es visible para el usuario en lugar del texto completo dentro de un campo de texto largo (¡barras de desplazamiento!).

También probé otra solución al generar una imagen a partir de una respuesta de stackoverflow . Esto imprime todo el texto, pero no respeta el formato del texto como nuevas líneas. Pero no quiero manejar todo el asunto yo solo.

Estoy obligado a usar Android 4.3 y versiones anteriores.

  1. ¿Hay una manera inteligente de capturar texto en imágenes? Si no:
  2. ¿Es posible modificar el código anterior para que funcione como se espera?

Después de buscar otras 24 horas para encontrar una solución, encontré esta solución para una vista web . El truco es

  1. generar otra vista para contener el contenido para evitar el marcador de EditText en el borde inferior de la vista que también se imprimirá en la imagen
  2. copie el mapa de bits para evitar problemas con el procesador de software después de destroyDrawingCache () cuando intente utilizar Bitmap.compress ().

Aquí está el código:

EditText editText = (EditText) findViewById(R.id.editText); TextView textView = new TextView(this.getApplicationContext()); textView.setTypeface(editText.getTypeface()); textView.setText(editText.getText()); textView.measure( View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.setDrawingCacheEnabled(true); textView.buildDrawingCache(); Bitmap b = textView.getDrawingCache().copy(Bitmap.Config.ARGB_8888, false); textView.destroyDrawingCache(); try{ String path = Environment.getExternalStorageDirectory().toString() + "/picture.png"; OutputStream outputStream = new FileOutputStream(new File(path)); b.compress(Bitmap.CompressFormat.PNG, 0, outputStream); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); }