我正在尝试以编程方式获取屏幕截图。相同的代码适用于不存在 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();
}
}