在一个布局中截取视频视图和其他多视图的屏幕截图

时间:2017-05-10 14:18:17

标签: android android-layout android-fragments

我创建了一个在运行时创建随机布局数的应用程序。我需要在一段时间后捕获屏幕/我的应用程序的屏幕截图(未修复)。我使用以下代码成功创建了屏幕的位图:

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的屏幕截图之一。 enter image description here

我找到了解决方案。但如果只使用一个布局,它将起作用。为此,我使用了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)。我正在寻找一种适用于任何时间的通用解决方案。

1 个答案:

答案 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;
}