登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 97|回复: 3

Android 播放视频常见问题小结,android常见面试题

[复制链接]

276

主题

276

帖子

1583

安币

手工艺人

发表于 2017-11-21 11:55:55 | 显示全部楼层 |阅读模式

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

        常见的问题

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

        在activity 中 设置

[Java] 查看源文件 复制代码
 android:configchanges="orientation|screensize"

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

        重写系统方法

[Java] 查看源文件 复制代码
public void onconfigurationchanged(configuration newconfig) {
    // todo auto-generated method stub
    super.onconfigurationchanged(newconfig);
    if (newconfig.orientation == configuration.orientation_landscape) {
      initvideolandlayout();
    } else {
      initvideoportlayout();
    }
  }

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

[Java] 查看源文件 复制代码
 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();
    }
  }

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

[Java] 查看源文件 复制代码
 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);
  }

        这是竖屏处理

[Java] 查看源文件 复制代码
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 中的方法

[Java] 查看源文件 复制代码
 @override
  public boolean ontouchevent(motionevent ev) {
    if (isinplaybackstate() && mmediacontroller != null) {
      togglemediacontrolsvisiblity();
    }
    return false;
  }

        再朝下看

[Java] 查看源文件 复制代码
private void togglemediacontrolsvisiblity() {
    if (mmediacontroller.isshowing()) {
      mmediacontroller.hide();
    } else {
      mmediacontroller.show();
    }
  }

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

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


0

主题

8658

帖子

-2416

安币

限制会员

发表于 2017-11-22 04:44:28 | 显示全部楼层
不错不错,楼主辛苦了。。。

0

主题

8568

帖子

-2486

安币

限制会员

发表于 2017-11-23 03:58:15 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

14

主题

9984

帖子

-1985

安币

限制会员

发表于 2017-11-24 18:22:56 | 显示全部楼层
感谢分享,楼主V5~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表