Vitamio使用时,VideoView自动向上弹导致VideoView显示不全问题的完美解决方案

在使用Vitamio时,一般会使用Vitamio中自带的控制器MediaController。但是使用MediaPlayer时会有一个bug,就是当VideoView调用完setMediaController之后,会自动向上弹一小块区间,导致显示在VideoView上方的TextView显示不到屏幕上。如下图所示:


如上图所示,开始在VideoView上方有两个TextView控件,分别是红色和绿色字体,但是当设置MediaController之后,造成VideoView向上移动,两个TextView被遮住。

通过以下方式可以解决此问题:

MainActivity.java

package material.danny_jiang.com.vitamioplayerdemo;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.Vitamio;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;

public class MainActivity extends AppCompatActivity {

    public static final Uri videoUrl = Uri.parse("http://112.253.22.157/17/z/z/y/u/" +
            "zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/" +
            "D046015255134077DDB3ACA0D7E68D45.flv");
    private static final String TAG = "345";

    private VideoView videoView;
    private TextView textCache;
    private TextView textSpeed;
    private MediaController controller;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();

        if (Vitamio.initialize(this)) {
            videoView.setVideoURI(videoUrl);

            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                        @Override
                        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                /*
                 * add media controller
                 */
                            controller = new MediaController(MainActivity.this);
                            videoView.setMediaController(controller);
                /*
                 * and set its position on screen
                 */
                            controller.setAnchorView(videoView);
                        }
                    });
                }
            });

//            controller = new MediaController(this);
//            videoView.setMediaController(controller);
//            controller.setAnchorView(videoView);
//            controller.setMediaPlayer(videoView);

            videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                /**
                 *
                 * @param mp      the MediaPlayer the update pertains to
                 * @param percent 视频缓冲的进度
                 */
                @Override
                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    Log.e(TAG, "onBufferingUpdate: percent is " + percent);
                    textCache.setText("已缓冲: " + percent + "%");
                }
            });

            videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                /**
                 *
                 * @param mp    the MediaPlayer the info pertains to.
                 * @param what  缓冲的提示信息
                 * @param extra 下载的速度提示
                 * @return
                 */
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    switch (what) {
                        //开始缓冲
                        case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                            Log.e(TAG, "onInfo: MEDIA_INFO_BUFFERING_START");
                            textCache.setVisibility(View.VISIBLE);
                            textSpeed.setVisibility(View.VISIBLE);
                            videoView.pause();
                            break;
                        //缓冲结束
                        case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                            Log.e(TAG, "onInfo: MEDIA_INFO_BUFFERING_END");
                            //textCache.setVisibility(View.INVISIBLE);
                            //textSpeed.setVisibility(View.INVISIBLE);
                            videoView.start();
                            break;
                        //下载速度发生改变
                        case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
                            Log.e(TAG, "onInfo: MEDIA_INFO_DOWNLOAD_RATE_CHANGED");
                            textSpeed.setText("下载速度: " + extra + "kb/s");
                            break;
                    }
                    return true;
                }

            });

            videoView.start();

        }
    }

    private void initViews() {
        textCache = ((TextView) findViewById(R.id.cacheText));
        textSpeed = ((TextView) findViewById(R.id.netSpeed));
        videoView = ((VideoView) findViewById(R.id.videoView_Main));
        videoView.setVideoLayout(VideoView.VIDEO_LAYOUT_STRETCH, 0);
    }
}
设置VideoView的onPrepareListener,当监听到onPrepare方法之后动态设置onVideoViewSizeChanged监听器,当VideoView尺寸发生改变之后再设置MediaController



评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值