2011-10-14 73 views
9

我在Activity內部有一個簡單的EditText,我想從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

This Works !!!但幾乎沒有錯誤。如果文本框中存在更多文本,則圖像高度不會調整大小。它削減文本。你有什麼想法解決這個問題嗎? –

回答

12

您可以通過建立繪圖緩存得到位。這應該工作。

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

Lalit當您嘗試在onCreate方法中構建緩存時,繪圖尚未發生,因此drawingCache應該沒有任何內容。將buildDrawingChache方法放入onClick方法中。或者在onCreate中使用下面的代碼。

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

但我認爲在onClick方法中構建緩存將是正確的,因爲屏幕將被繪製。另外我記得的是,如果你在onCreate之後輸入文本,那麼你應該在那之後建立緩存。所以試試第一種方法。

ViewTreeObserver

其全球佈局監聽到其不斷得到調用時anyhing更改視圖或ViewGroup中。我通常在我需要在onCreate方法中獲取寬度和高度的視圖的情況下使用它。沒有這個值,將始終爲0,因爲沒有繪圖或測量發生。

假設您在輸入時需要不斷更新edittext的imageview,那麼您可以使用它並刪除第一個刪除偵聽器的行。即使光標閃爍,也會爲您輸入的每個字符調用偵聽器。

+0

最新錯誤?我只是測試了這個代碼。你可以把你的代碼放好嗎?順便說一句你在哪裏試圖執行此代碼(onCreate)? – blessenm

+0

你確定,我已經添加了我的代碼看看它。 –

+0

我更新了我的答案 – 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。 –