Nexus 10上的VideoView

时间:2014-02-11 09:43:46

标签: android android-videoview android-dialogfragment

我在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();
}

1 个答案:

答案 0 :(得分:0)

你有谷歌这个问题吗?

看看:

VideoView is not displayed on a Fragment

  • getActivity()而不是getApplicationContext()
  • 启用硬件加速
  • 显示更多代码;)