我已经对此进行了相当多的研究,答案并没有帮助100%,我确实找到了一种让它工作的方法,但它很糟糕,我不理解这种行为。
这就是我最终拥有的:
private Bitmap generateBitmapFromTxt() {
mTxtEmojicon.setDrawingCacheEnabled(true);
Bitmap bmap = Bitmap.createBitmap(mTxtEmojicon.getDrawingCache());
mTxtEmojicon.setDrawingCacheEnabled(false);
}
但是位图并不令人耳目一新。我也尝试过:
invalidate()
buildDrawingCache()
destroyDrawingCache()
我有一个从TextView扩展的自定义类,生成的位图没有包装单词,除非动态强制计算它的大小。像这样:
private void prepareTxtViewSize() {
int specWidth = View.MeasureSpec.makeMeasureSpec(mEdt.getMeasuredWidth(), View.MeasureSpec.AT_MOST);
int specHeight = View.MeasureSpec.makeMeasureSpec(mEdt.getMeasuredHeight(), View.MeasureSpec.AT_MOST);
mTxt.measure(specWidth, specHeight);
mTxt.layout(0, 0, mTxt.getMeasuredWidth(), mTxt.getMeasuredHeight());
}
我的自定义TextView类不会覆盖onDraw()
。
现在,我的解决方案,糟糕的解决方案是在调用prepareTxtViewSize()
之前调用generateBitmapFromTxt()
两次并且它有效,位图刷新并且我总是得到正确的位图。
但我确信我有些遗漏,我很幸运。那么有人知道我错过了什么和/或为什么两次调用prepareTxtViewSize()
实际上会使drawingCache刷新?