2011-10-14 14 views
9

Tengo una sencilla EditText dentro de un Activity y quiero crear una imagen de la Bitmap que EditText y content of the EditText. El Image debe tener el mismo aspecto que el EditText y el content.Crear mapa de bits de la imagen de EditarTexto y su contenido

Here is how I want the Image should look like, aunque esto es un EditText pero quiero un mapa de bits que debe tener el mismo aspecto. Entonces, ¿cómo puedo lograr esto? Cualquier idea sería genial

enter image description here

Este es mi código,

public class EditTextPinchZoomActivity extends Activity { 

    EditText editText; 
    ImageView imageView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     imageView = (ImageView) findViewById(R.id.image_view); 
     editText = (EditText) findViewById(R.id.edit_text); 
     editText.buildDrawingCache(); 
    } 

    public void myOnClick(View view) { 

     switch (view.getId()) { 
     case R.id.btn: 
      imageView.setImageBitmap(editText.getDrawingCache()); 

      break; 
     default: 
      break; 
     } 
    } 
} 
+0

Esto funciona! pero con pequeño error. Si existe más texto en el cuadro de texto, la altura de la imagen no cambiará de tamaño. cortó el texto. ¿Tienes alguna idea para resolver esto? –

Respuesta

12

Puede obtener el mapa de bits mediante la construcción de la memoria caché de dibujo. Esto debería funcionar.

EditText edit = (EditText)findViewById(R.id.edit); 
edit.buildDrawingCache(); 
ImageView img = (ImageView)findViewById(R.id.test); 
img.setImageBitmap(edit.getDrawingCache()); 

Lalit cuando intenta generar la memoria caché en el método onCreate, el dibujo no ha sucedido todavía por lo que el drawingCache debería tener nada. Pon el método buildDrawingChache en el método onClick. O use el siguiente código en onCreate.

ViewTreeObserver vto = editText.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     editText.buildDrawingCache(); 
     } 
}); 

pero creo que la construcción de la memoria caché en el método onClick será adecuada como la pantalla se dibuja para entonces. Y otra cosa que recuerdo es que, si ingresas texto después de onCreate, entonces debes construir el caché después de eso. Entonces prueba el primer método.

ViewTreeObserver

Es un oyente diseño global para una vista o ViewGroup que sigue recibiendo llamadas cuando anyhing cambios en el diseño. Normalmente uso esto en los casos en que necesito obtener ancho y alto de vistas en el método onCreate. Sin esto, el valor siempre será 0 ya que no se realizó ningún dibujo o medición.

Supongamos que tiene un requisito para seguir actualizando su vista de imagen del texto de edición mientras escribe, puede usar esto y simplemente eliminar la primera línea donde elimino el oyente. Se llamará al oyente por cada carácter que escriba, incluso cuando el cursor parpadee.

+0

¿Qué pasa? Yo probé este código. ¿Puedes subir tu código? Por cierto, ¿dónde estás tratando de ejecutar este código (onCreate)? – blessenm

+0

seguro, había agregado mi código echéle un vistazo. –

+0

He actualizado mi respuesta – blessenm

3

Use cualquiera ViewGroup para obtener mapas de bits:

FrameLayout frame = (FrameLayout) findByViewId(R.id.FrameLayout); 
frame.addView(your edittext object);//add on your layout design 
frame.setDrawingCacheEnabled(true); 
Bitmap bmp = frame.getDrawingCache(); 

esperan que ayude.

+0

Gracias por responder, pero tengo una solución simple y fácil de blessenm, pero su respuesta también es agradable. +1 por eso. –

Cuestiones relacionadas