2015-06-20 67 views
2

我試圖在我的活動中動態添加視圖。將文本視圖轉換爲位圖返回null

你能告訴我我做錯了什麼,位圖由於某種原因返回null。

感謝,

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_share); 

    TextView tv = new TextView(this); 
    tv.setText("sadasdsadssad"); 
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.MATCH_PARENT); 
    tv.setLayoutParams(lp); 

    tv.setDrawingCacheEnabled(true); 
    tv.buildDrawingCache(); 
    Bitmap bm = tv.getDrawingCache(); 
    ImageView im = (ImageView)findViewById(R.id.imgQuestion); 
    im.setImageBitmap(bm); 

} 
+0

的)我是調試和我發現Mitmap爲空。 –

回答

1

你沒有文本視圖添加到屏幕上。一旦你添加它,視圖的高度和寬度將被計算用於渲染,然後只有視圖將被繪製,你可以從中獲取位圖。

做三件事情,

  1. TextView的添加到圖像視圖的父。
  2. 做一個postdelayed來獲取允許android系統呈現視圖的位圖。
  3. 獲取放置在圖像視圖中的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); 


} 
+0

它的工作,感謝harish,所以問題是我沒有在屏幕上添加我的觀點之前,將其轉換爲位圖? –

+0

是的。如果渲染沒有發生,則不會生成位圖,只有在將視圖添加到當前顯示佈局時纔會進行渲染。因此,爲了生成位圖,您需要將視圖添加到當前佈局。如果在獲取該位圖後不再需要該文本視圖,則可以將其刪除。 –

+0

好的,理解。再次感謝 –