[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.6 播放器的UI制作

Github项目地址

为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)

回到目录

每个人对于UI都有不同的理解,而且UI也不是这系列文章的重点,所以我们主要讨论一些常见问题,尽量让大家少踩坑

模式切换

模式主要有单双屏、陀螺仪/触控,以及两者的互相组合,不同的模式对于MVP矩阵的处理不同,还需要考虑应用隐藏到后台时的资源释放/保存问题

一般GL上下文在应用资源不足时会被自动释放,然后就造成了各种各样的异常,还不知道该怎么改好,有一个方法可以让应用在后台也保存GL上下文:

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
    glSurfaceView.setPreserveEGLContextOnPause(true);
}

播放进度、视频时长

接口就是MediaPlayer的那些接口,但是实现可能各有不同,代码仅供参考


@Override
public void onCompletion(MediaPlayer mp) {
    statusHelper.setPanoStatus(PanoStatus.COMPLETE);
    if (playerCallback!=null){
        playerCallback.requestFinish();
    }
}

public void seekTo(int pos){
    if (mMediaPlayer!=null){
        PanoStatus panoStatus=statusHelper.getPanoStatus();
        if (panoStatus==PanoStatus.PLAYING
            || panoStatus==PanoStatus.PAUSED
                || panoStatus== PanoStatus.PAUSED_BY_USER)
            mMediaPlayer.seekTo(pos);
    }
}

public int getDuration(){
    if (mMediaPlayer!=null){
        return mMediaPlayer.getDuration();
    }
    return 0;
}

public int getCurrentPosition(){
    if (mMediaPlayer!=null){
        return mMediaPlayer.getCurrentPosition();
    }
    return 0;
}

进度条自动隐藏

这个算辅助功能吧,不过如果要让用户点一下才隐藏也太不人性化了??
通过设置一个TimerTask,可以实现一段时间后自动隐藏(使用第三方库或者自己加上淡出动画就更棒了)

public void hide(){
    if (!visible) return;
    visible=false;
    progressToolbar.setVisibility(View.GONE);
    controlToolbar.setVisibility(View.GONE);
}

public void show(){
    if (visible) return;
    visible=true;
    progressToolbar.setVisibility(View.VISIBLE);
    controlToolbar.setVisibility(View.VISIBLE);
}

public void startHideControllerTimer(){
    if (!autoHideController) return;
    cancelHideControllerTimer();
    hideControllerTimer=new Timer();
    hideControllerTimerTask=new HideControllerTimerTask();
    hideControllerTimer.schedule(hideControllerTimerTask,2666);
}

public void cancelHideControllerTimer(){
    if (hideControllerTimer!=null) {
        hideControllerTimer.cancel();
    }
    if (hideControllerTimerTask!=null) {
        hideControllerTimerTask.cancel();
    }
}

public class HideControllerTimerTask extends TimerTask{
    @Override
    public void run() {
        ((Activity)context).runOnUiThread(new Runnable() {
            @Override
            public void run() {
                hide();
            }
        });
    }
}

Github项目地址
回到目录

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值