我在EditText中有一个简单的Activity,我想根据该BitmapEditText创建一个content of the EditText图像。 Image的外观应与EditText及其content相同。
Here is how I want the Image should look like,虽然这是一个EditText,但是我想要一个看起来与此相同的位图。那么,我该如何实现呢?任何想法都很棒。

这是我的代码,

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

最佳答案

您可以通过构建图形缓存来获取位图。这应该工作。

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

当您尝试在onCreate方法中构建缓存时,拉力特尚未完成绘制,因此drawingCache应该没有任何内容。可以将buildDrawingChache方法放在onClick方法中。或在onCreate中使用以下代码。
ViewTreeObserver vto = editText.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        editText.buildDrawingCache();
        }
});

但是我认为在onClick方法中构建缓存将是正确的,因为届时屏幕将被绘制。我要提醒的另一件事是,如果在onCreate之后输入文本,则应在此之后构建缓存。因此,尝试第一种方法。

ViewTreeObserver

它是 View 或 View 组的全局布局监听器,在布局发生任何更改时都会不断调用该 View 或 View 组。我通常在需要在onCreate方法中获取 View 的宽度和高度的情况下使用此方法。没有此值,因为未进行任何绘图或测量,该值将始终为0。

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

关于android - 从EditText及其内容创建位图图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7763667/

10-13 07:37