1. 程式人生 > >Android利用自定義VideoView輕鬆實現用視訊做背景

Android利用自定義VideoView輕鬆實現用視訊做背景

前言:有人問我,即便夢想成真了又能怎樣,或許不能怎樣,但這是夢想。

介紹:最近開發需要弄一個像QQ一樣的登陸介面(介面要用視訊做背景),上網發現這個博主介紹的比較好,便轉載來分享給更多的人。

先看看效果

效果圖

單張圖片

這裡寫圖片描述

這裡寫圖片描述

注意事項(程式碼裡也標註出來了):

  • 視訊資源要新增res資料夾下建立raw資料夾
  • 需要在onRestart()方法裡重新載入視訊,防止退出返回時視訊黑屏
  • 我這樣寫簡單粗暴而已,當然,也可優雅的以自己看播放控制元件的VideoView處理方法,去處理資源釋放和播放顯示的問題。
  • 記得修改佈局控制元件
/**
 * Created by DaQiE on 2017/2/20 0020.
 */
public classCustomVideoViewextendsVideoView { public CustomVideoView(Context context) { super(context); } public CustomVideoView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super
(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //我們重新計算高度 int width = getDefaultSize(0, widthMeasureSpec); int height = getDefaultSize(0, heightMeasureSpec); setMeasuredDimension(width, height); } @Override
public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) { super.setOnPreparedListener(l); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } }

**主要程式碼類:
MainActivity**

/**
 * 視訊資源要新增res資料夾下建立raw資料夾
 * 需要在onRestart()方法裡重新載入視訊,防止退出返回時視訊黑屏
 * 我這樣寫簡單粗暴而已,當然,也可優雅的以自己看播放控制元件的VideoView處理方法,去處理資源釋放和播放顯示的問題。
 * 記得修改佈局控制元件<com.daqie.videobackground.CustomVideoView...引用的包名,不然會報錯哦
 * android:screenOrientation="portrait" 習慣性的把橫豎屏切換也設定一下
 * android:theme="@style/Theme.AppCompat.Light.NoActionBar" ActionBar也可以設定成不顯示的狀態,可以根據自己喜好和專案需求
 */
public classMainActivityextendsAppCompatActivity {
    //建立播放視訊的控制元件物件
    private CustomVideoView videoview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //載入資料
        initView();
    }

    private void initView() {
        //載入視訊資源控制元件
        videoview = (CustomVideoView) findViewById(R.id.videoview);
        //設定播放載入路徑
        videoview.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video));
        //播放
        videoview.start();
        //迴圈播放
        videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                videoview.start();
            }
        });
    }

    //返回重啟載入
    @Override
    protected void onRestart() {
        initView();
        super.onRestart();
    }

    //防止鎖屏或者切出的時候,音樂在播放
    @Override
    protected void onStop() {
        videoview.stopPlayback();
        super.onStop();
    }
}

XML佈局程式碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.daqie.videobackground.MainActivity">

    <com.daqie.videobackground.CustomVideoView
android:id="@+id/videoview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentTop="true" />
</RelativeLayout>