3

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

我的代码是:

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

5 回答 5

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
于 2012-11-02T06:13:28.363 回答
0

您必须在 onCreate 之后执行此操作。在 onCreate 期间,您的布局被测量和膨胀,但您的 UI 尚未创建。请参阅 Activity 生命周期文档:

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() 中获取位图。

于 2012-11-01T08:01:03.327 回答
0

创建方法调用 void screenshot(){ 你的 btimap 代码 } Onactivity 调用 screenshot();

于 2012-11-01T08:01:12.060 回答
0

正如“onCreate()”方法所暗示的那样,您的活动将在此时创建。因此,此时您无法进行屏幕截图。在“onResume()”中尝试您的代码:

...
@Override
public void onResume(){
    View v1 = findViewById(R.id.printpreviewBaseScrollView);
    v1.setDrawingCacheEnabled(true);
    Bitmap bmv = v1.getDrawingCache();
}
...
于 2012-11-01T08:03:11.607 回答
-1

根据android的文档

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

在此处输入图像描述

从上图可以看出,执行onCreate()时不在可见生命周期内,无法获取截图。

将您的代码移动到onResume(),它应该在可见的生命周期中

于 2012-11-01T08:02:32.107 回答