2015-06-20 70 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

好的,理解。再次感谢 –