我在Android应用程序中工作,我想在Overrided方法onCreate()中捕获当前活动的屏幕。当我在Overrided方法onCreate()中编写用于捕获屏幕的代码时,位图返回null。但是当我在一个按钮中调用相同的代码时,单击相同的活动,位图将返回正确的值。请更正我的代码,以便在我的ocCreate()方法本身中通过位图返回。
我的代码是:
View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();
答案 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()调用。在此期间,用户可以在屏幕上看到活动,但它可能不在前台并与用户交互。
从上图中可以看出,当执行 onCreate()时,它不在可见生命周期中,并且您无法获取屏幕截图。
将代码移至 onResume(),该代码应位于可见生命周期。