0

我尝试了下面的代码,但是当我运行它时,它在 android mobile 上给出了一个黑屏图像,在模拟器上它给出了一个文件,通过打开这个文件我得到消息预览不可用

View v = activity.getWindow().getDecorView();

    v.setDrawingCacheEnabled(true);
    v.destroyDrawingCache();

    int width = activity.getWindowManager().getDefaultDisplay().getWidth();
    int height = activity.getWindowManager().getDefaultDisplay().getHeight();
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    v.layout(0, 0, width, height); 

    v.buildDrawingCache(true);
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false); // clear drawing cache

    FileOutputStream fos = null;
    File fTree = new File(sdCardRoot,"/fi.png");
    fTree.createNewFile();

    try {

        fos = new FileOutputStream(fTree,true);
        if (null != fos) {
            b.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.flush();
            fos.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

请有人帮忙。谢谢你。

4

2 回答 2

1

好吧。您可能必须覆盖以下方法。问题是因为您的视图尚未创建,甚至在此之前您正试图获取实际上不存在的背景,因此您没有得到任何图像。

试试这个,

 @Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
   // add the entire code for getting the background within this and it will work 
} 

一旦你的视图被绘制,这个方法就会被调用,因此你将通过覆盖这个方法来获得所需的输出。

于 2012-06-18T07:43:30.843 回答
0

这在 onCreate() 中不起作用,因为只有在 onCreate() 完成后才能看到 Activity。当 onCreate() 完成时触发一些事件来运行你的代码。可能是按钮事件的 onClick()。

于 2012-10-25T21:04:46.670 回答