方法onCreate中的屏幕捕获在android中不起作用
我在一个android应用程序中工作,我想在重写的onCreate()方法中捕获当前活动的屏幕。当我在重写的onCreate()方法中编写捕获屏幕的代码时,位图返回null。但是,当我在同一活动中的按钮单击中调用相同的代码时,位图返回正确的值。请更正我的代码,使其在ocCreate()方法本身中按位图返回 我的代码是:方法onCreate中的屏幕捕获在android中不起作用,android,Android,我在一个android应用程序中工作,我想在重写的onCreate()方法中捕获当前活动的屏幕。当我在重写的onCreate()方法中编写捕获屏幕的代码时,位图返回null。但是,当我在同一活动中的按钮单击中调用相同的代码时,位图返回正确的值。请更正我的代码,使其在ocCreate()方法本身中按位图返回 我的代码是: View v1 = findViewById(R.id.printpreviewBaseScrollView); v1.setDrawingCacheEnabled(true);
View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();
您必须在创建之前完成此操作。在onCreate期间,您的布局会被测量和膨胀,但您的UI尚未创建。请参阅活动生命周期文档: 我只是复制并粘贴了你的代码。您可能应该将v1设置为类级变量,在onCreate()中设置它的引用,然后在onStart()中获取位图。Create方法调用 无效截图(){ 您的btimap代码 } 主动呼叫
截图() 根据android的文档 活动的可见生存期发生在调用 onStart()直到相应的onStop()调用。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互 从上图可以看出,当执行onCreate()时,它不在可见生存期内,因此无法获得屏幕截图 将代码移动到onResume(),它应该在可见生命周期内,因为方法“onCreate()”表明此时将创建活动。因此,此时您不能进行屏幕截图。在“onResume()”中尝试您的代码:
很抱歉,在onResume()方法中,我仍然没有将位图设置为null。是否有其他方法可以执行此操作?抱歉,在onResume()方法中,我仍然没有将位图设置为null。是否有其他方法可以执行此操作?抱歉,在onStart()和onResume()方法中,我仍然没有将位图设置为null。还有其他方法吗?
@Override
public void onStart(){
View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();
}
...
@Override
public void onResume(){
View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();
}
...
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