I am trying to get screen shot programmatically. The same code is working for other screens where SurfaceViewRenderer is not present. Even in same screen other views are getting captured but not the view of SurfaceViewRenderer view.
Any help will be appreciated.
I am attaching my code below which include xml file and function which captures screen.
<?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>
Following code is to capture screen shot
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();
}
}
Also attaching images which shows actual and expected behavior.
PixelCopy worked for me.