你沒有文本視圖添加到屏幕上。一旦你添加它,視圖的高度和寬度將被計算用於渲染,然後只有視圖將被繪製,你可以從中獲取位圖。
做三件事情,
- TextView的添加到圖像視圖的父。
- 做一個postdelayed來獲取允許android系統呈現視圖的位圖。
- 獲取放置在圖像視圖中的postDelayed runnable中的位圖。
如果您不希望文本視圖不顯示,請使用textView.setVisibility(View.INVISIBLE);取出位圖之後。
這是我的代碼爲您的問題。
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ImageView
android:id="@+id/img_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
的onCreate(MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv;
tv = new TextView(this);
tv.setText("sadasdsadssad");
tv.setVisibility(View.INVISIBLE);
ViewGroup rl = (ViewGroup) findViewById(R.id.root);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
tv.setLayoutParams(lp);
rl.addView(tv);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
tv.setDrawingCacheEnabled(true);
tv.buildDrawingCache();
Bitmap bm = tv.getDrawingCache();
ImageView im = (ImageView) findViewById(R.id.img_view);
im.setImageBitmap(bm);
}
},100);
}
的)我是調試和我發現Mitmap爲空。 –