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
在我的项目中,我有一个 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