我在FragmentDialog中使用VideoView(允许我将它用作嵌套/全屏播放器)。
它适用于我的所有设备(xoom / n4),但在我的Nexus10上,视频显示器没有显示(黑色矩形),但我可以听到声音。 如果我没有使用片段,则播放有效,因此它不是编解码器问题。
VideoView被某些东西“隐藏”。
你们有没有人知道如何解决它?
非常感谢!!
(PS:占位符在播放开始时隐藏)
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF0000"
android:id="@+id/fragmentDialogLayout"
>
<FrameLayout android:id="@+id/placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00FF00"
android:layout_gravity="center"
android:layout_centerInParent="true"
/>
<VideoView android:id="@+id/VideoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:layout_centerInParent="true"
/>
<ProgressBar android:id="@+id/ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
java的一些重要部分:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle b)
{
View view = inflater.inflate(R.layout.VideoLayout, container);
initDialog();
initWindow();
return view;
}
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(
Color.TRANSPARENT));
}
void initDialog()
{
setCancelable(false);
getDialog().setCanceledOnTouchOutside(false);
getDialog().setOnKeyListener(this);
}
void initWindow()
{
window = getDialog().getWindow();
window.setGravity(Gravity.TOP|Gravity.LEFT);
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
//window.setBackgroundDrawable(new ColorDrawable(Color.BLACK));
setPosition(0, 0);
setSize(640, 480);
}
public void setPosition(int x, int y)
{
WindowManager.LayoutParams attr = window.getAttributes();
attr.x = x;
attr.y = y;
updateAttributes(attr);
}
public void setSize(int width, int height)
{
WindowManager.LayoutParams attr = window.getAttributes();
attr.width = width;
attr.height = height;
updateAttributes(attr);
}
public void updateAttributes(final WindowManager.LayoutParams attr)
{
getActivity().runOnUiThread(new Runnable()
{
public void run()
{
window.setAttributes(attr);
}
});
}
//@see android.media.MediaPlayer.OnPreparedListener
public void onPrepared(MediaPlayer mp)
{
View placeholder = (View)getView().findViewById(R.id.placeholder);
placeholder.setVisibility(View.GONE);
videoPlayer.setBackgroundColor(Color.TRANSPARENT);
mediaPlayer = mp;
mediaPlayer.setLooping(playbackLoop);
progressBar.setVisibility(View.INVISIBLE);
mp.setOnBufferingUpdateListener(this);
mp.setOnInfoListener(this);
}
void preparePlayback()
{
progressBar.setVisibility(View.VISIBLE);
videoPlayer.setKeepScreenOn(true);
videoPlayer.requestFocus();
}
答案 0 :(得分:0)
你有谷歌这个问题吗?
看看:
VideoView is not displayed on a Fragment
和