在android中View类有相应的方法可以把View中的内容转化为Bitmap,主要是以下一些方法:
                  TextView tv = new TextView(context);
tv.layout(0, 0, 100, 100);
tv.setText("北京");
tv.setTextColor(Color.WHITE);
tv.setTextSize(28.0f);
tv.setDrawingCacheEnabled(true);
tv.buildDrawingCache(true);
tv.setDrawingCacheEnabled(true);
tv.buildDrawingCache(true);
Bitmap bitmap = tv.getDrawingCache();
tv.setDrawingCacheEnabled(false);
但是好像如果想生成bitmap必须设置tv.layout(0, 0, 100, 100);
否则返回的bitmap为空。不知有谁对这个比较了解,交流一下。现在我想把布局View的工作放在xml中,通过在java中获得xml中的View,然后再得到其中的bitmap,如下:
main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="256px"
android:layout_height="256px">
<TextView android:layout_width="256px"
android:layout_height="256px" android:textSize="50px"
android:textColor="#ffffff" android:gravity="center_vertical|center_horizontal"
android:shadowColor="#000000" android:shadowDx="0" android:shadowDy="-2"
android:shadowRadius="0.1" android:text="雕刻文字效果"
android:background="@drawable/white"/>
</LinearLayout>java中的处理:
                  LayoutInflater factory = LayoutInflater.from(this);
View view = factory.inflate(R.layout.main, null);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(true);
Bitmap bitmap = view.getDrawingCache();
view.setDrawingCacheEnabled(false);
但是正如上述所说,因为没有调用View的layout()方法,返回的bitmap为null。
有人知道如何处理吗?能正确的从xml的布局文件中得到相应的bitmap。

解决方案 »

  1.   

    此问题已解决!方法如下:
    01.//加载xml布局文件   
    02.        LayoutInflater factory = LayoutInflater.from(context);  
    03.        View view = factory.inflate(R.layout.main, null);  
    04.        //获得布局文件中的TextView   
    05.        TextView city = (TextView) view.findViewById(R.id.city);  
    06.        //设置city的文本信息   
    07.        city.setText("xml中的textview");    
    08.        //启用绘图缓存   
    09.        view.setDrawingCacheEnabled(true);        
    10.        //调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null   
    11.        view.measure(MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY),  
    12.                MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY));  
    13.        //这个方法也非常重要,设置布局的尺寸和位置   
    14.        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());  
    15.        //获得绘图缓存中的Bitmap   
    16.        view.buildDrawingCache();  
    17.        Bitmap bitmap = view.getDrawingCache();