如何使用 VideoView Android 切换全屏

How To toggle FullScreen with VideoView Android

我正在使用视频视图进行直播,我想让这个 VideoView 切换 全屏 并返回小屏幕 MXPlayerYouTube 玩家无需停止直播。

<ScrollView
    android:id="@+id/scrollview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/ad_container"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@android:color/transparent" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" >

        <TextView
            android:id="@+id/scroll_annouc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="@color/red"
            android:ellipsize="marquee"
            android:fadingEdge="horizontal"
            android:lines="1"
            android:marqueeRepeatLimit="marquee_forever"
            android:padding="@dimen/ten_dp"
            android:scrollHorizontally="true"
            android:singleLine="true"
            android:text="@string/app_name"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@android:color/white"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/scroll_annouc"
            android:background="@android:color/transparent"
            android:orientation="vertical" >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="270dp"
                android:background="@android:color/black" >

                <TextView
                    android:id="@+id/error_overlay"
                    android:layout_width="match_parent"
                    android:layout_height="270dp"
                    android:layout_alignParentTop="true"
                    android:background="@color/red_trans"
                    android:gravity="center"
                    android:text="@string/error_text"
                    android:textColor="@android:color/white"
                    android:textStyle="bold"
                    android:visibility="invisible" />

                <VideoView
                    android:id="@+id/player"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentTop="true" />

                <RelativeLayout
                    android:id="@+id/media_controller"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:background="@color/black_trans" >

                    <ImageView
                        android:id="@+id/btn_playpause"
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:background="@drawable/btn_pause"
                        android:contentDescription="@string/app_name"
                        android:padding="@dimen/five_dp" />

                    <Button
                        android:id="@+id/external_player"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:background="@null"
                        android:text="Use External Player"
                        android:textColor="@android:color/white"
                        android:textSize="@dimen/content_size"
                        android:textStyle="bold" />

                    <ImageView
                        android:id="@+id/btn_fullscreen"
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:contentDescription="@string/app_name"
                        android:padding="@dimen/five_dp"
                        android:src="@drawable/enter_fullscreen" />
                </RelativeLayout>
            </RelativeLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/two_dp"
                android:background="@color/app_blue" />

            <TextView
                android:id="@+id/loading_txt"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingBottom="@dimen/two_dp"
                android:paddingLeft="@dimen/ten_dp"
                android:paddingRight="@dimen/ten_dp"
                android:paddingTop="@dimen/two_dp"
                android:text="@string/app_name"
                android:textColor="@android:color/white"
                android:textSize="@dimen/content_size"
                android:visibility="invisible" />

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/one_dp"
                android:background="@color/light_grey" />

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/one_dp"
                android:background="@color/light_grey" />

            <LinearLayout
                android:id="@+id/channel_links_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:orientation="horizontal"
                android:padding="@dimen/ten_dp" >
            </LinearLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/one_dp"
                android:background="@color/light_grey" />

            <HorizontalScrollView
                android:id="@+id/horizontal_view"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:fillViewport="true"
                android:scrollbars="horizontal" >

                <LinearLayout
                    android:id="@+id/viewsContainer"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal" >
                </LinearLayout>
            </HorizontalScrollView>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/one_dp"
                android:background="@color/light_grey" />
        </LinearLayout>
    </RelativeLayout>
</ScrollView>

一切正常,就像流媒体视频一样,但我无法让这个 VideoView 转到 landscape 并在 中显示视频全屏。我试过用谷歌搜索它,但我发现的所有例子目前都不适合我。所以请告诉我如何切换 全屏 。 谢谢。

要全屏播放视频,您必须创建单独的 activity,如下所示。 半屏 activity 是 -

    public class HalfScreen extends Activity {
        Button fullbtn;
        VideoView videoView = null;
        final int REQUEST_CODE = 5000;
        // "https://www.youtube.com/embed/olsO7UJemhE";
        final String videoToPlay = "http://bffmedia.com/bigbunny.mp4";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.half);
            videoView = (VideoView) findViewById(R.id.VideoViewhalf);
            final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
            fullbtn = (Button) findViewById(R.id.btnfullScreen);

            Uri video = Uri.parse(videoToPlay);
            videoView.setVideoURI(video);
            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                public void onPrepared(MediaPlayer mp) {
                    progressBar.setVisibility(View.GONE);
                    videoView.requestFocus();
                    videoView.start();
                }
            });

            fullbtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Intent videointent = new Intent(HalfScreen.this,
                            FullScreen.class);
                    videointent.putExtra("currenttime",
                            videoView.getCurrentPosition());
                    videointent.putExtra("Url", videoToPlay);
                    startActivityForResult(videointent, REQUEST_CODE);

                }
            });
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
                if (data.hasExtra("currenttime")) {
                    int result = data.getExtras().getInt("currenttime", 0);
                    if (result > 0) {
                        if (null != videoView) {
                            videoView.start();
                            videoView.seekTo(result);
                            ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
                            progressBar.setVisibility(View.VISIBLE);

                        }
                    }
                }
            }
        }
    } 


//Now the full screen activity

     public class FullScreen extends Activity {
            Button btn;
            VideoView videoView = null;
            int currenttime = 0;
            String Url="";
            private static ProgressDialog progressDialog;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);

                Bundle extras = getIntent().getExtras();
                if (null != extras) {
                    currenttime = extras.getInt("currenttime", 0);
                    Url=extras.getString("Url");
                }
                setContentView(R.layout.full);
                progressDialog = ProgressDialog.show(this, "", "Loading...", true);
                videoView = (VideoView) findViewById(R.id.VideoViewfull);
                MediaController mediaController = new MediaController(this);
                mediaController.setAnchorView(videoView);

                Uri video = Uri.parse(Url);
                videoView.setMediaController(mediaController);
                videoView.setVideoURI(video);
                videoView.setOnPreparedListener(new OnPreparedListener() {
                    public void onPrepared(MediaPlayer arg0) {
                        progressDialog.dismiss();
                        videoView.start();
                        videoView.seekTo(currenttime);
                    }
                });
            }

            @Override
            public void finish() {
                Intent data = new Intent();
                data.putExtra("currenttime", videoView.getCurrentPosition());
                setResult(RESULT_OK, data);
                super.finish();
            }
        }

//To make the video full screen use below layout
full.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff99cc"
    android:orientation="vertical" >

    <VideoView
        android:id="@+id/VideoViewfull"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >
    </VideoView>

</RelativeLayout>

我所做的是创建了一个 CustomVideoView,它像这样扩展 VideoView:

public class CustomVideoView extends VideoView {

private int measuredWidth = 0;
private int measuredHeight = 0;

public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    // TODO Auto-generated constructor stub
}

public CustomVideoView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

public CustomVideoView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public void setNewDimension(int width, int height) {
    this.measuredHeight = height;
    this.measuredWidth = width;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(measuredWidth, measuredHeight);
}
}//end class

然后在我的播放器 activity 上,我在全屏按钮的 onclick 上实现了这个:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    android.widget.RelativeLayout.LayoutParams params = new android.widget.RelativeLayout.LayoutParams(
            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,
            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT);
    player.setNewDimension(metrics.widthPixels, metrics.heightPixels);
    player.getHolder().setFixedSize(metrics.heightPixels,
            metrics.widthPixels);
    player.setLayoutParams(params);

这样我的问题就解决了。希望它也能解决其他问题。

注意:很抱歉没有给任何人积分,因为我忘记了我在 google 上找到的链接,这些链接让我为自己制定了一个合适的解决方案。

我知道为时已晚,但我只是为其他朋友写的。

只需将此行添加到您的清单 activity 以避免重新加载视频

android:configChanges="orientation|screenSize|keyboardHidden"

希望对您有所帮助