2011-10-14 14 views
9

Mam proste EditText wewnątrz Activity i chcę utworzyć obraz Bitmap z tego EditText i content of the EditText. Model Image powinien wyglądać tak samo, jak EditText i jego content.Utwórz obraz bitmapowy z EditText i jego zawartości

Here is how I want the Image should look like, ale jest to EditText, ale chcę bitmapy, która powinna wyglądać tak samo. Jak mogę to osiągnąć? Każdy pomysł będzie świetny.

enter image description here

To jest mój kod,

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

To działa !!! ale z małym błędem. Jeśli w polu tekstowym jest więcej tekstu, to nie zmieni się wysokość obrazu. przeciął tekst. Czy masz jakiś pomysł, aby rozwiązać ten problem? –

Odpowiedz

12

można uzyskać budując mapę bitową pamięć podręczną rysowania. To powinno działać.

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

Lalit podczas próby zbudować bufor w metodzie onCreate, rysunek nie zdarzyło się jeszcze tak drawingCache powinien mieć nic wspólnego. Albo umieść metodę buildDrawingChache w metodzie onClick. Lub użyj następującego kodu w onCreate.

Ale myślę, że budowanie pamięci podręcznej w metodzie onClick będzie właściwe, ponieważ ekran zostanie wówczas narysowany. Inną rzeczą, o której wspomniałem, jest to, że jeśli wprowadzasz tekst po instancji onCreate, powinieneś zbudować pamięć podręczną po tym. Więc spróbuj pierwszej metody.

ViewTreeObserver

Jego globalny układ słuchacza widoku lub viewgroup który utrzymuje zwanego coraz Kiedy anyhing zmian w układzie. Zwykle używam tego w przypadkach, gdy potrzebuję uzyskać szerokość i wysokość widoków w metodzie onCreate. Bez tego wartość będzie zawsze wynosić 0, ponieważ nie ma żadnego rysunku ani pomiaru.

Załóżmy, że masz obowiązek aktualizować swój imageview editekstu podczas pisania, możesz go użyć i po prostu usunąć pierwszy wiersz, w którym usunę obiekt nasłuchujący. Detektor będzie wywoływany dla każdego wpisywanego znaku, nawet gdy kursor będzie migał.

+0

co jest nie tak? Sprawdziłem ten kod. Czy możesz umieścić swój kod w górze? Btw gdzie próbujesz wykonać ten kod (onCreate)? – blessenm

+0

ya pewnie, dodałem mój kod, spójrz na to. –

+0

Ive zaktualizowałem moją odpowiedź – blessenm

3

Użyj dowolnego ViewGroup dostać 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(); 

Mam nadzieję, że to pomoże.

+0

Dzięki za odpowiedź, ale dostałem proste i łatwe rozwiązanie przez blessenm, ale twoja odpowiedź też jest fajna. +1 za to. –

Powiązane problemy