欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 播放视频常见问题小结

程序员文章站 2023-01-21 09:26:26
在android 开发中常见到视频播放的问题,在常规的视频中 有直接用videoview + mediacontroller 或者 mediacontroller + se...

在android 开发中常见到视频播放的问题,在常规的视频中 有直接用videoview + mediacontroller 或者 mediacontroller + serfercie holder

常见的问题

1 在播放中如何处理播放器的横屏切换 和 播放器上的文案显示的布局变化

在activity 中 设置

 android:configchanges="orientation|screensize"

这样在旋转中,activity 就不会重建

重写系统方法

public void onconfigurationchanged(configuration newconfig) {
    // todo auto-generated method stub
    super.onconfigurationchanged(newconfig);
    if (newconfig.orientation == configuration.orientation_landscape) {
      initvideolandlayout();
    } else {
      initvideoportlayout();
    }
  }

通过 判断 newconfig.orientation 来判断 当前是横屏还是竖屏, 这个是在看视频的过程中去判断是不是横屏还是竖屏,在我门一开始播放视频的时候,也可以去判断,具体的处理方法是

 private void initvideoplayerlayout() {
    displaymetrics dm = new displaymetrics();
    getwindowmanager().getdefaultdisplay().getmetrics(dm);
    width = dm.widthpixels;
    heigh = dm.heightpixels;
    if (width / heigh > 0) { // 横屏
      initvideolandlayout();
      fullscreen = true;
    }
    if (width / heigh == 0) { //竖屏
      initvideoportlayout();
    }
  }

在具体变化播放器上的布局的时候我们可以动态的去更换

 private void initvideoportlayout() {
    relativelayout.layoutparams videolp = new relativelayout.layoutparams(relativelayout.layoutparams.match_parent, relativelayout.layoutparams.match_parent);
    videolp.addrule(relativelayout.center_in_parent);
    videoview.setlayoutparams(videolp);
    videoview.start();
    relativelayout.layoutparams hotelinfolp = new relativelayout.layoutparams(deviceinfoutil.getpixelfromdip(200), deviceinfoutil.getpixelfromdip(55));
    hotelinfolp.addrule(relativelayout.align_parent_bottom);
    hotelinfolp.addrule(relativelayout.align_parent_right);
    hotelinfolp.rightmargin = deviceinfoutil.getpixelfromdip(8);
    hotelinfolp.bottommargin = deviceinfoutil.getpixelfromdip(90);
    mhotelinfolayout.setlayoutparams(hotelinfolp);
  }

这是竖屏处理  

private void initvideolandlayout() {
    relativelayout.layoutparams layoutparams =
        new relativelayout.layoutparams(relativelayout.layoutparams.fill_parent, relativelayout.layoutparams.fill_parent);
    layoutparams.addrule(relativelayout.align_parent_top);
    layoutparams.addrule(relativelayout.align_parent_left);
    layoutparams.addrule(relativelayout.align_parent_right);
    videoview.setlayoutparams(layoutparams);
    relativelayout.layoutparams hotelinfolp = new relativelayout.layoutparams(deviceinfoutil.getpixelfromdip(200), deviceinfoutil.getpixelfromdip(55));
    hotelinfolp.addrule(relativelayout.align_parent_right);
    hotelinfolp.addrule(relativelayout.align_parent_bottom);
    hotelinfolp.rightmargin = deviceinfoutil.getpixelfromdip(8);
    hotelinfolp.bottommargin = deviceinfoutil.getpixelfromdip(95);
    mhotelinfolayout.setlayoutparams(hotelinfolp);
  }

这是横屏处理

我门知道 系统的videoview 控件 自带有播放,暂停 等进度条这是mediacontronller 当我们手点击的时候 进度条会显示,手离开界面的时候,会不显示,这是videoview 中的方法

 @override
  public boolean ontouchevent(motionevent ev) {
    if (isinplaybackstate() && mmediacontroller != null) {
      togglemediacontrolsvisiblity();
    }
    return false;
  }

再朝下看

private void togglemediacontrolsvisiblity() {
    if (mmediacontroller.isshowing()) {
      mmediacontroller.hide();
    } else {
      mmediacontroller.show();
    }
  }

最终调的是 mmediacontroller.hide(); 和 mmediacontroller.show(),

所以我门在自己的播放器界面要是实现自己的布局和播放器进度条 重写hide() 和 show() 方法即可

以上所述是小编给大家介绍的android 播放视频常见问题小结,希望对大家有所帮助