0

我正在尝试以编程方式获取屏幕截图。相同的代码适用于不存在 SurfaceViewRenderer 的其他屏幕。即使在同一屏幕上,其他视图也会被捕获,但 SurfaceViewRenderer 视图的视图不会。

任何帮助将不胜感激。

我在下面附上了我的代码,其中包括 xml 文件和捕获屏幕的函数。

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/call_layout_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_light"
        android:orientation="vertical">

        <org.webrtc.SurfaceViewRenderer
            android:id="@+id/remote_gl_surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <FrameLayout
            android:id="@+id/screen_share_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="right"
            android:visibility="gone">

            <org.webrtc.SurfaceViewRenderer
                android:id="@+id/remote_screen_gl_surface_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </FrameLayout>

        <org.webrtc.SurfaceViewRenderer
            android:id="@+id/local_gl_surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </FrameLayout>

    <LinearLayout
        android:id="@+id/top_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="#20000000"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingTop="@dimen/activity_horizontal_margin"
        android:paddingBottom="@dimen/activity_horizontal_margin">

        <ImageView
            android:id="@+id/back_button"
            style="@style/ScreenBackButtonStyle"
            android:tint="@color/pure_white" />

        <LinearLayout
            android:id="@+id/top_bar_buttons_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:visibility="visible">

            <com.workapps.chat.custom.FontTextView
                android:id="@+id/contact_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="end"
                android:maxLines="1"
                android:textColor="@color/pure_white"
                android:textSize="20sp"
                tools:text="Rudrajeet Desai" />

            <ImageButton
                android:id="@+id/start_screen_share"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_share"
                android:visibility="gone"
                tools:visibility="visible" />

            <ImageButton
                android:id="@+id/stop_screen_share"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_share_stop"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/screenshot"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_capture"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/record_video"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_start_recording"
                android:visibility="gone" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/outgoing_call_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:orientation="vertical"
        android:visibility="visible">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <com.workapps.chat.custom.RoundedImageView
                android:id="@+id/contactPhotoIV"
                android:layout_width="75dp"
                android:layout_height="75dp" />

            <LinearLayout
                android:layout_width="75dp"
                android:layout_height="75dp">

                <TextView
                    android:id="@+id/contactInitialTV"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/contact_initial_background_gray"
                    android:gravity="center"
                    android:text=""
                    android:textColor="@color/pure_white"
                    android:textSize="24sp"
                    android:visibility="visible"
                    tools:text="RD" />
            </LinearLayout>
        </FrameLayout>

        <com.workapps.chat.custom.FontTextView
            android:id="@+id/calling_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="@color/pure_white"
            android:textSize="20sp" />

        <com.workapps.chat.custom.FontTextView
            android:id="@+id/call_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="@color/pure_white"
            android:textSize="20sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_btns_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:background="@android:color/transparent"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/swap"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_camera_swipe"
            android:visibility="invisible" />

        <ImageButton
            android:id="@+id/end_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_end" />


        <ImageButton
            android:id="@+id/mute_audio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_audio_mute" />

        <ImageButton
            android:id="@+id/unmute_audio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_audio_mute_active"
            android:visibility="gone" />

        <ImageButton
            android:id="@+id/mute_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_feed" />

        <ImageButton
            android:id="@+id/unmute_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_feed_off"
            android:visibility="gone" />

    </LinearLayout>
</RelativeLayout>

以下代码是捕获屏幕截图

public void takeScreenshot2() {
        Date now = new Date();
        android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

        View rootView = getWindow().getDecorView().getRootView();

        rootView.setDrawingCacheEnabled(true);
        rootView.buildDrawingCache(true);
        Bitmap bm = Bitmap.createBitmap(rootView.getDrawingCache(true));
        bm = bm.copy(Bitmap.Config.RGB_565, true);
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

        rootView.setDrawingCacheEnabled(false);
        File f = new File(DeviceUtil.getExternalPath()+ "/" + now + ".jpg");
        try {
            f.createNewFile();
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            MessageHelper.showMessageToast(this,"Screen shot has taken successfully");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

还附上显示实际和预期行为的图像。实际和预期的行为

4

1 回答 1

0

PixelCopy 为我工作。

 final Bitmap bitmap = Bitmap.createBitmap(remoteVideoView.getWidth(), remoteVideoView.getHeight(),
            Bitmap.Config.ARGB_8888);
    // Make the request to copy.
    PixelCopy.request(remoteVideoView, bitmap, (copyResult) -> {
        if (copyResult == PixelCopy.SUCCESS) {
            Log.e(TAG, bitmap.toString());
            saveBitmapToFile(bitmap, contactId);
        } else {
            MessageHelper.showMessageToast(WACApplication.getApp(),
                    R.string.screen_capture_failed + copyResult);
        }
    }, new Handler());
于 2020-11-06T10:53:04.907 回答