美文网首页
嘻哈帮面试

嘻哈帮面试

作者: 我才是张雷 | 来源:发表于2017-07-11 18:42 被阅读0次

    1.传值除了用Intent还能用什么
    2.自定义view
    3.事件分发机制
    4.让周末在家:视频实现倍速、镜像以及AB循环播放(倍速和镜像面试官已经做出来了,只要完成AB循环播放,模仿中舞网app的视频播放)
    5.技术是个妹子,技术是个妹子,技术是个妹子

    周末找demo,找视频播放框架,去ijkplayer-issues的github上提问最后没有思路放弃了,周一上午一觉睡起来,突来来了灵感
    1.先随便找了个demo用来设置ab两点-ATDragViewDemo
    2.采用Viatmio框架播放(妹子用的就是这个)
    3.获取视频的时间长度duration = mVideoView.getDuration(),结果得到的值始终是-1,查了下说要在视频播放器的准备事件里获取

     mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    //此处设置播放速度为正常速度1,可以更改倍速
                    mediaPlayer.setPlaybackSpeed(1.0f);
                    //在这里获取
                    duration = mediaPlayer.getDuration()
                }
            });
    

    这会结果终于不是-1了,变成0了,算了时间快来不及了,写死吧,反正以后获取视频播放地址的时候会返回视频的时间长度的(如果不返回再说0.0)
    4.根据时间的长度(多少秒)来把上面的ATDragView分成多少份,每滑动一次就是一秒
    5.在ATDragView的OnDragFinishedListener中分别设置ab两点

     atDragView.setLinstener(new ATDragView.OnDragFinishedListener() {
                @Override
                public void dragFinished(int leftPostion, int rightPostion) {
                    //因为每次滑动a或者b都会进入这个方法
                    //当我只滑动了b的时候,也会让视频跳转到a开始播放
                    //所以每次记录下新的a的位置`newStart`,与全局的`start`作比较,如果不一致就保存新的位置,并跳转到新的位置播放
                    long newStart = leftPostion;
                    long newEnd = rightPostion;
                    if (start != newStart) {
                        start = leftPostion;
                        mVideoView.seekTo(start);
                    }
                    end = rightPostion;
    
                    Log.i("test", "开始:" + leftPostion + "结束:" + rightPostion + "当前 毫秒" + start);
                }
            });
    

    6.找到获取当前播放事件的方法mVideoView.getCurrentPosition(),然后起个定时器,每隔一秒查询下当前的位置,如果大于等于b就跳转到a

     timer = new Timer();//定时器,每隔一秒查询下当前的进度
     timer.schedule(task, 0, 1000);
     TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    long currentPosition = mVideoView.getCurrentPosition();//获取当前播放进度
                    if (end != 0 && currentPosition >= end) {//如果进度大于等于设置的b,那么跳转到a
                        mVideoView.seekTo(start);
                    }
                }
            };
    

    一个简单的demo就完成了,当我兴高采烈的发给面试官的时候,面试官说别人一个下午就做好了,唉,心塞,谁让自己以前没有做过视频播放呢,记录下,就当锻炼自己了

    相关文章

      网友评论

          本文标题:嘻哈帮面试

          本文链接:https://www.haomeiwen.com/subject/srbmhxtx.html