方法onCreate里面的屏幕截图不能在android中运行

时间:2012-11-01 07:51:27

标签: android

我在Android应用程序中工作,我想在Overrided方法onCreate()中捕获当前活动的屏幕。当我在Overrided方法onCreate()中编写用于捕获屏幕的代码时,位图返回null。但是当我在一个按钮中调用相同的代码时,单击相同的活动,位图将返回正确的值。请更正我的代码,以便在我的ocCreate()方法本身中通过位图返回。

我的代码是:

View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();

5 个答案:

答案 0 :(得分:1)

View printlayout = findViewById(R.id.printpreviewBaseRelativeLayout);
        printlayout.setDrawingCacheEnabled(true);

        printlayout.measure(printlayout.getMeasuredWidth(),
                printlayout.getMeasuredHeight());

         printlayout.layout(0, 0, 700, 1755);



        Log.e("width", "" + printlayout.getMeasuredWidth());
        Log.e("hight", "" + printlayout.getMeasuredHeight());

        printlayout.buildDrawingCache(true);

        bitmap = Bitmap.createBitmap(printlayout.getDrawingCache());
        printlayout.setDrawingCacheEnabled(false); // clear drawing cache

答案 1 :(得分:0)

你必须晚于onCreate。在onCreate期间,您的布局会被测量并膨胀,但您的UI尚未创建。请参阅活动生命周期文档:

http://developer.android.com/training/basics/activity-lifecycle/starting.html

@Override
public void onStart(){
     View v1 = findViewById(R.id.printpreviewBaseScrollView);
     v1.setDrawingCacheEnabled(true);
     Bitmap bmv = v1.getDrawingCache();
}

我只是复制并粘贴了你的代码。您应该将v1设为类级变量,在onCreate()中设置它的引用,然后在onStart()中获取位图。

答案 2 :(得分:0)

创建方法调用 void screenshot(){ 你的位图代码 } 不活跃的电话 屏幕截图();

答案 3 :(得分:0)

由于方法'onCreate()'表明您的活动将在此刻创建。因此,此时您无法进行屏幕捕获。在'onResume()'中试用你的代码:

...
@Override
public void onResume(){
    View v1 = findViewById(R.id.printpreviewBaseScrollView);
    v1.setDrawingCacheEnabled(true);
    Bitmap bmv = v1.getDrawingCache();
}
...

答案 4 :(得分:-1)

根据android的文档

  

活动的可见生命周期在调用之间发生   onStart()直到相应的onStop()调用。在此期间,用户可以在屏幕上看到活动,但它可能不在前台并与用户交互。

enter image description here

从上图中可以看出,当执行 onCreate()时,它不在可见生命周期中,并且您无法获取屏幕截图。

将代码移至 onResume(),该代码应位于可见生命周期