在Android VideoView上绘制覆盖图(HUD)?
我有一个可以绘制HUD的自定义视图:
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<VideoView
android:id="@+id/videoView1"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.widgets.HUD
android:id="@+id/hud"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.hud_fragment, container, false);
frameLayout = (FrameLayout) view.findViewById(R.id.frameLayout);
hudWidget = (HUD) view.findViewById(R.id.hudWidget);
videoView = (VideoView) view.findViewById(R.id.videoView1);
videoView.setVideoURI(Uri.parse("http://88.150.210.138:5001/spor"));
videoView.start();
frameLayout.removeView(hudWidget);
frameLayout.addView(hudWidget);
hudWidget.bringToFront();
return view;
}
视频开始播放时,我在VideoView上播放RTSP流,看起来像这样:
我如何强制HUD在VideoView上绘制? HUD extends SurfaceView
项目
我试图添加VideoView的项目是DroidPlanner您可以尝试克隆并查看问题。 (需要手动添加VideoView,因为它不在回购站中)。
我找到了你的问题的答案:SurfaceView上的VideoView SurfaceView和VideoView都是曲面视图,它不支持在旧版本的Android中重叠这些,但自2.0版以来可用。
你需要做什么:
hudWidget.getHolder().setFormat(PixelFormat.TRANSPARENT);
hudWidget.setZOrderMediaOverlay(true);
有一个拉你的请求,你可以尝试这些。 https://github.com/arthurbenemann/droidplanner/pull/247
提出解决方案的主题:https://groups.google.com/forum/?fromgroups#!msg/android-developers/nDNQcceRnYA/ps9wTBfXIyEJ
从这里的FrameLayout
文档:链接
子视图以堆叠形式绘制,最近添加的子项位于顶部
在布局文件的FrameLayout
中添加一个id
。 在你的onCreate(Bundle)
,你会有类似的东西:
// find your framelayout
frameLayout = (FrameLayout) findViewById(....);
videoView = (VideoView) findViewById(R.id.videoView1);
hudView = (com.widgets.HUD) findViewById(R.id.hud);
视频开始后,请执行以下操作:
frameLayout.removeView(hudView);
frameLayout.addView(hudView);
做一个Handler
, invalidate
你的hudView
每50或100毫秒invalidate
喜欢这个:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.hud_fragment, container, false);
frameLayout = (FrameLayout) view.findViewById(R.id.frameLayout);
hudWidget = (HUD) view.findViewById(R.id.hudWidget);
videoView = (VideoView) view.findViewById(R.id.videoView1);
videoView.setVideoURI(Uri.parse("http://88.150.210.138:5001/spor"));
videoView.start();
frameLayout.removeView(hudWidget);
frameLayout.addView(hudWidget);
hudWidget.bringToFront();
//The Handler which invalidate your (hudWidget) every 50 milliseconds
new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
hudWidget.invalidate();
sendEmptyMessageDelayed(0, 50);
};
}.sendEmptyMessage(0);
return view;
}
链接地址: http://www.djcxy.com/p/73133.html