如何解决Android:屏幕快照为org.webrtc.SurfaceViewRenderer
我正在尝试以编程方式获取屏幕截图。相同的代码适用于不存在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();
}
}
解决方法
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());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。