从EditText&创建位图图像它的内容

时间:2011-10-14 06:04:43

标签: android

我在EditText中有一个简单的Activity,我想从BitmapEditText创建一个content of the EditText图片。 Image应与EditText及其content相同。

Here is how I want the Image should look like,虽然这是一个EditText,但我想要一个与此相同的Bitmap。那么,我怎样才能做到这一点?任何想法都会很棒。

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;
        }
    }
}

2 个答案:

答案 0 :(得分: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

它是视图或视图组的全局布局侦听器,在对布局进行任何更改时会不断调用它。我通常在我需要在onCreate方法中获取视图宽度和高度的情况下使用它。如果没有这个值,由于没有进行绘图或测量,因此该值始终为0。

假设您需要在键入时不断更新edittext的imageview,您可以使用它并删除我删除侦听器的第一行。即使光标闪烁,也会为您键入的每个字符调用侦听器。

答案 1 :(得分: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();
  

希望它会有所帮助。