我创建了一个在运行时创建随机布局数的应用程序。我需要在一段时间后捕获屏幕/我的应用程序的屏幕截图(未修复)。我使用以下代码成功创建了屏幕的位图:
private Bitmap getBitmapOfRootView(View v){
v = v.getRootView();
v.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false);
return bitmap;
}
但是每当涉及VideoView时,我都会看到VideoView(s)区域的黑屏。
我找到了解决方案。但如果只使用一个布局,它将起作用。为此,我使用了VideoView getDrawingCache is returning black
中的以下代码public Bitmap videoFrame(String uri, long msec) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(uri);
return retriever.getFrameAtTime(msec);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (RuntimeException ex) {
ex.printStackTrace();
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
}
}
return null;
}
我知道如果屏幕上只显示视频,可以使用上面的代码截取VideoView的屏幕截图。但是,在我的应用程序中,多个视图同时可见(ImageView,WebView)。我正在寻找一种适用于任何时间的通用解决方案。
答案 0 :(得分:0)
试试这个
Bitmap bitmap = getBitmapFromView(rootView, rootView.getChildAt(0).getHeight(), rootView.getChildAt(0).getWidth());
private Bitmap getBitmapFromView(View view, int height, int width) {
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
view.draw(canvas);
return bitmap;
}