2011-10-14 8 views
9

EditTextActivityの中にあり、EditTextcontent of the EditTextからBitmapイメージを作成したいと思います。 Imageは、EditTextとそのcontentと同じに見えるはずです。EditTextとその内容からビットマップイメージを作成する

Here is how I want the Image should look likeこれはEditTextですが、これと同じように見えるビットマップが必要です。だから、私はこれをどのように達成できますか?どんなアイデアも素晴らしいだろう。

enter image description here

これは、あなたが描画キャッシュを構築することにより、ビットマップを取得することができます私のコード、

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

小さなバグはありません。テキストボックスにテキストがさらに存在する場合、イメージの高さはリサイズされません。それはテキストをカットする。これを解決する考えはありますか? –

答えて

12

です。これはうまくいくはずです。あなたがのonCreateメソッドでキャッシュを構築しようとすると、drawingCacheは何もないはずですので、

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

ラリット、描画はまだ起きていません。 buildDrawingChacheメソッドをonClickメソッドに配置します。または、onCreateで次のコードを使用します。

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

しかし、私はonClickメソッドでキャッシュを構築することは、画面が描画されるので適切であると思います。そして私がremeberedしたことは、onCreateの後にテキストを入力すると、そのあとでキャッシュを構築すべきです。だから最初の方法を試してください。

ViewTreeObserver

そのグローバルレイアウトリスナーレイアウトにする場合anyhing変更と呼ばれる取得保持ビューまたはのViewGroupに。私は通常、onCreateメソッドでビューの幅と高さを取得する必要がある場合にこれを使用します。これがなければ、描画または測定が行われていないので、値は常に0になります。

入力時にedittextのイメージビューを更新し続ける必要があるとします。これを使用して、リスナーを削除する最初の行を削除するだけです。リスナーは、カーソルが点滅しても入力するすべての文字に対して呼び出されます。

+0

何が間違っていますか?私はこのコードをテストしました。あなたのコードを置くことができますか? Btwどこでこのコード(onCreate)を実行しようとしていますか? – blessenm

+0

確かに、私は自分のコードを見てきました。 –

+0

Iveは私の答えを更新しました – blessenm

3

は、ビットマップを取得するためにあらゆるのViewGroupを使用します。

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

はそれに役立つことを願っています。

+0

私はblessenmによって簡単で簡単な解決策を得ましたが、あなたの答えもまた素晴らしいものです。それに対して+1。 –

関連する問題