UniversalVideoView del marco de código abierto de Android

Introducción

La forma más fácil de reproducir video en Android es usar VideoView incorporado en el SDK y luego agregar MediaController para controlar la pausa de reproducción de video, etc., pero esto tiene la desventaja de que no puede personalizar su propia interfaz de usuario de control, así que aquí es un control de reproducción personalizado. Puede establecer una variedad de atributos personalizados (como estilo de carga, video de error, etc.), y es fácil cambiar entre pantalla completa y pantalla no completa, y es compatible con Android V2.3 y superior sistemas.

usar

  • Enlace de descarga: https://github.com/linsea/UniversalVideoView
  • compile 'com.linsea: universalvideoview: 1.1.0@aar'

Caso de estudio

package com.example.dell.myapplication;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.universalvideoview.UniversalMediaController;
import com.universalvideoview.UniversalVideoView;

public class MainActivity extends Activity implements UniversalVideoView.VideoViewCallback{
    
    

    private static final String TAG = "MainActivity";
    private static final String SEEK_POSITION_KEY = "SEEK_POSITION_KEY";
    private static final String VIDEO_URL = "https://vfx.mtime.cn/Video/2016/11/07/mp4/161107094111718495_480.mp4";

    UniversalVideoView mVideoView;
    UniversalMediaController mMediaController;

    View mBottomLayout;
    View mVideoLayout;
    TextView mStart;

    private int mSeekPosition;
    private int cachedHeight;
    private boolean isFullscreen;
    private TextView tv_title;
    private LinearLayout titlebar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_universalvideoview);
        tv_title = (TextView) findViewById(R.id.tv_title);
        titlebar = (LinearLayout) findViewById(R.id.titlebar);
        tv_title.setText("UniversalVideoView");

        mVideoLayout = findViewById(R.id.video_layout);
        mBottomLayout = findViewById(R.id.bottom_layout);
        mVideoView = (UniversalVideoView) findViewById(R.id.videoView);
        mMediaController = (UniversalMediaController) findViewById(R.id.media_controller);
        mVideoView.setMediaController(mMediaController);
        //设置播放屏幕模式和设置播放地址
        setVideoAreaSize();
        //设置屏幕状态和播放状态的监听
        mVideoView.setVideoViewCallback(this);
        mStart = (TextView) findViewById(R.id.start);

        mStart.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                if (mSeekPosition > 0) {
    
    
                    mVideoView.seekTo(mSeekPosition);
                }
                mVideoView.start();
                mMediaController.setTitle("Big Buck Bunny");
            }
        });

        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    
    
            @Override
            public void onCompletion(MediaPlayer mp) {
    
    
                Log.d(TAG, "onCompletion ");
            }
        });

        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
    
            @Override
            public void onPrepared(MediaPlayer mp) {
    
    
                if (mSeekPosition > 0) {
    
    
                    mVideoView.seekTo(mSeekPosition);
                }
                mVideoView.start();
            }
        });
    }

    @Override
    protected void onPause() {
    
    
        super.onPause();
        Log.d(TAG, "onPause ");
        if (mVideoView != null && mVideoView.isPlaying()) {
    
    
            mSeekPosition = mVideoView.getCurrentPosition();
            Log.d(TAG, "onPause mSeekPosition=" + mSeekPosition);
            mVideoView.pause();
        }
    }

    /**
     * 置视频区域大小
     */
    private void setVideoAreaSize() {
    
    
        mVideoLayout.post(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                int width = mVideoLayout.getWidth();
                cachedHeight = (int) (width * 405f / 720f);
//                cachedHeight = (int) (width * 3f / 4f);
//                cachedHeight = (int) (width * 9f / 16f);
                ViewGroup.LayoutParams videoLayoutParams = mVideoLayout.getLayoutParams();
                videoLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
                videoLayoutParams.height = cachedHeight;
                mVideoLayout.setLayoutParams(videoLayoutParams);
                mVideoView.setVideoPath(VIDEO_URL);
                mVideoView.requestFocus();
            }
        });
    }
    //当屏幕发生改变的时候,如果要保持进度必须自己重写onSaveInstanceState方法
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    
    
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState Position=" + mVideoView.getCurrentPosition());
        outState.putInt(SEEK_POSITION_KEY, mSeekPosition);
    }

    @Override
    protected void onRestoreInstanceState(Bundle outState) {
    
    
        super.onRestoreInstanceState(outState);
        mSeekPosition = outState.getInt(SEEK_POSITION_KEY);
        Log.d(TAG, "onRestoreInstanceState Position=" + mSeekPosition);
    }

    /**
     * 全屏和默认的切换
     * @param isFullscreen
     */
    @Override
    public void onScaleChange(boolean isFullscreen) {
    
    
        this.isFullscreen = isFullscreen;
        if (isFullscreen) {
    
    
            ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams();
            layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
            layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
            mVideoLayout.setLayoutParams(layoutParams);
            mBottomLayout.setVisibility(View.GONE);

            //全屏就隐藏标题栏
            titlebar.setVisibility(View.GONE);

        } else {
    
    
            ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams();
            layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
            layoutParams.height = this.cachedHeight;
            mVideoLayout.setLayoutParams(layoutParams);
            mBottomLayout.setVisibility(View.VISIBLE);
            //竖直方法的时候,显示标题栏
            titlebar.setVisibility(View.VISIBLE);
        }
//        switchTitleBar(!isFullscreen);
    }

//    private void switchTitleBar(boolean show) {
    
    
//        android.support.v7.app.ActionBar supportActionBar = getSupportActionBar();
//        if (supportActionBar != null) {
    
    
//            if (show) {
    
    
//                supportActionBar.show();
//            } else {
    
    
//                supportActionBar.hide();
//            }
//        }
//    }

    @Override
    public void onPause(MediaPlayer mediaPlayer) {
    
    
        Log.d(TAG, "onPause UniversalVideoView callback");
    }

    @Override
    public void onStart(MediaPlayer mediaPlayer) {
    
    
        Log.d(TAG, "onStart UniversalVideoView callback");
    }

    @Override
    public void onBufferingStart(MediaPlayer mediaPlayer) {
    
    
        Log.d(TAG, "onBufferingStart UniversalVideoView callback");
    }

    @Override
    public void onBufferingEnd(MediaPlayer mediaPlayer) {
    
    
        Log.d(TAG, "onBufferingEnd UniversalVideoView callback");
    }

    @Override
    public void onBackPressed() {
    
    
        if (this.isFullscreen) {
    
    
            mVideoView.setFullscreen(false);
        } else {
    
    
            super.onBackPressed();
        }
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/titlebar" />

    <FrameLayout
        android:id="@+id/video_layout"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:background="@android:color/black">

        <com.universalvideoview.UniversalVideoView
            android:id="@+id/videoView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            app:uvv_autoRotation="true"
            app:uvv_fitXY="false" />

        <com.universalvideoview.UniversalMediaController
            android:id="@+id/media_controller"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            app:uvv_scalable="true" />
    </FrameLayout>

    <LinearLayout
        android:id="@+id/bottom_layout"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <Button
            android:id="@+id/start"
            android:layout_margin="5dp"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:background="@color/uvv_green"
            android:gravity="center"
            android:text="start" />

        <TextView
            android:id="@+id/introduction"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="this is video introduciton ......"
            android:background="@color/uvv_gray" />
    </LinearLayout>
</LinearLayout>

Supongo que te gusta

Origin blog.csdn.net/qq_36828822/article/details/104152838
Recomendado
Clasificación