textview.getDrawingCache() 无法正常工作

textview.getDrawingCache() not working properly

在我的项目中,我有一个 EditText、一个 TextView 和一个 Imageview。我在 Textview 和 Imageview 中显示用户在 EditText 中输入的内容。这是代码:

public class MainActivity extends AppCompatActivity{
    private TextView textView;
    private EditText editText;
    private ImageView imageView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


textView= (TextView) findViewById(R.id.flip);
imageView= (ImageView) findViewById(R.id.iv_text_to_image);
editText= (EditText) findViewById(R.id.original);

textView.setText("Hello World");
textView.setDrawingCacheEnabled(true);
textView.buildDrawingCache();

imageView.setImageBitmap(textView.getDrawingCache());



editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                //s = "."+s;
                textView.setText(s);
                imageView.setImageBitmap(textView.getDrawingCache());
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
}
}

该代码有时可以运行但并不完美,例如,如果我取消注释 s = "."+s;它有效但不在 ImageView 中显示最后输入的字符。如果我删除该行,结果会出乎意料,它们在很大程度上取决于您的类型。如果不是 s = "."+s;我改成s = "a"+s;或另一个字母,如 b 或 c 等,结果再次未被检查。

您认为 .setImageBitmap() 和 .getDrawingCache() 会发生什么?

顺便一提,在 imageView

中没有显示 "Hello world"

我这样做修复了它:

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
                    textView.setText(s);
                }

 @Override
 public void afterTextChanged(Editable s) {

                    textView.setDrawingCacheEnabled(true);
                    imageView.setDrawingCacheEnabled(true);
                    // this is the important code :)
                    // Without it the view will have a dimension of 0,0 and the bitmap will be null
                    textView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                    textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
                    Bitmap bm2 = textView.getDrawingCache();

                    if (bm2!=null){
                        imageView.setImageBitmap(bm);
                    }else{
                        imageView.setImageBitmap(textView.getDrawingCache());
                    }

                }

我从这里得到灵感Android View.getDrawingCache returns null, only null