Kri*_*dra 19 android screenshot off-screen android-activity
我正在开发一个Android应用程序.我有一个活动,比如A,它用整个屏幕填充视图.在AI中按下一个按钮想要开始另一个活动,比如B,它也有一些视图和控件.我希望活动B在屏幕外,并希望从A获取B的屏幕截图.可能吗?
注意:我通过将绘图缓存保存到位图中来成功获取页面A的屏幕截图,但很难获取屏幕外页面的屏幕截图.
Kan*_*dha 14
是的,有可能......你应该在Activity'A'中扩展ActivityGroup.然后在按钮点击事件中执行此操作...
View view =getLocalActivityManager().startActivity("B",new Intent(this,B.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
Run Code Online (Sandbox Code Playgroud)
然后将该视图转换为位图...
我觉得这对你很有帮助......
好吧,我已经实现了我想要的.这些是我使用的步骤.
使用startActivityForResult()而不是startActivity()启动活动B.
Intent bIntent = new Intent(A.this,B.class);
startActivityForResult(bIntent,B_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)在onCreate of activity B中,使用B的mainLayout并启用其绘图缓存
final LinearLayout layout = (LinearLayout)
findViewById(R.id.app_parent_layout);
layout.setDrawingCacheEnabled(true);
layout.setDrawingCacheQuality(LinearLayout.DRAWING_CACHE_QUALITY_HIGH);
Run Code Online (Sandbox Code Playgroud)在活动B中等待其布局完全绘制(这非常重要).对于活动B的onCreate(),获取B的mainLayout,使用ViewTreeObserver在完全绘制布局时获取回调.
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
getDrawingBitmap();
}
});
Run Code Online (Sandbox Code Playgroud)现在,在完全绘制布局时调用getDrawingBitmap().拿你的截图.
public void getDrawingBitmap(){
LinearLayout mainLayout = (LinearLayout)
findViewById(R.id.app_parent_layout);
Bitmap b = mainLayout.getDrawingCache();
File file = saveBitmapAsFile(b);
Intent resultIntent = new Intent();
resultIntent.putExtra("FullFileName",file.getAbsolutePath());
setResult(Activity.RESULT_OK,resultIntent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我将位图和保存为文件并返回文件名作为结果代码.我确信有更好的方法将位图发送到父活动,而不是保存为文件和发送文件名.但无论如何我有一个要求保存位图的要求.所以对我来说这是更简单的方法.设置结果完成活动后.
现在,在Activity A上,onActivityResult()检索文件名.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == B_REQUEST_CODE){
if (resultCode == Activity.RESULT_OK) {
String newText = data.getStringExtra("FullFileName");
File dir = new File (newText);
}
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
9344 次 |
| 最近记录: |