2011-10-14 4 views
9

J'ai un EditText simple à l'intérieur d'un Activity et je veux créer une image de ce BitmapEditText et content of the EditText. Le Image devrait ressembler au EditText et son content.Créer Bitmap Image de EditText et son contenu

Here is how I want the Image should look like, bien que ce soit un EditText mais je veux un bitmap qui devrait ressembler à ceci. Alors, comment puis-je y parvenir? Toute idée serait géniale.

enter image description here

Ceci est mon code,

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

Cela fonctionne !!! mais avec un petit bug. Si plus de texte existe dans la zone de texte, la hauteur de l'image n'est pas redimensionnée. il coupe le texte. Avez-vous une idée pour résoudre ce problème? –

Répondre

12

Vous pouvez obtenir le bitmap en construisant le cache de dessin. Cela devrait fonctionner.

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

Lalit lorsque vous essayez de construire le cache dans la méthode onCreate, le dessin n'a pas encore eu lieu si l'drawingCache ne devrait rien. Placez la méthode buildDrawingChache dans la méthode onClick. Ou utilisez le code suivant dans onCreate. Mais je pense que la construction du cache dans la méthode onClick sera correcte car l'écran sera alors dessiné. Et une autre chose que je me suis souvenu est, si vous entrez du texte après l'onCreate, alors vous devriez construire le cache après cela. Alors essayez la première méthode.

ViewTreeObserver

Son un __gVirt_NP_NN_NNPS<__ auditeur de mise en page globale à une vue ou viewgroup qui ne cesse de s'appeler lorsque anyhing changements à la mise en page. Je l'utilise normalement dans les cas où j'ai besoin d'obtenir la largeur et la hauteur des vues dans la méthode onCreate. Sans cela, la valeur sera toujours 0 car aucun dessin ou mesure n'a eu lieu. Supposons que vous ayez besoin de mettre à jour votre imageview de l'edittext pendant que vous tapez, vous pouvez l'utiliser et supprimer la première ligne où je supprime l'écouteur. L'écouteur sera appelé pour chaque caractère que vous tapez même lorsque le curseur clignote.

+0

quoi de mal? J'ai jsut testé ce code. Pouvez-vous mettre votre code en place? Btw où essayez-vous d'exécuter ce code (onCreate)? – blessenm

+0

tu as bien sûr, j'avais ajouté mon code jette un coup d'oeil. –

+0

Ive mis à jour ma réponse – blessenm

3

Utilisez une ViewGroup pour obtenir bitmap:

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

espère que cela aidera.

+0

Merci d'avoir répondu mais j'ai eu une solution simple et facile par blessenm, mais votre réponse est également bonne. +1 pour ça. –

Questions connexes