时移拖动进度条不流畅

时移拖动进度条不流畅

1,在android 5.1系统上由于系统上报keydown事件的速度相比android 4.4系统慢,导致apk拖动进度条时,进度条变化不是很流畅,而是一抖一抖的进度变化。为了能够在按下down事件时,进度条能够流畅变化,所要做的是模拟系统keydown事件,加快keydown事件的频率,且拖动进度条。

2,思路:由于keydown 和 keyup 事件是成对出现,当按下遥控不动时,系统会不断向应用层抛keydown事件,这个时候标记keydown事件,isStartMove 置为 true,当手松开遥控按键,响应到keyup事件,isStartMove置为false。当 isStartMove为true时,用handler实现一个定时器,每隔 50ms去刷新进度条的长度,通过moveAddRunnable对象实现拖动进度条的效果。当isStartMove 为false时,将handler 消息队列中的所有刷新进度条的 moveAddRunnable 对象移出队列。


 mPb.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if(event.getAction() == KeyEvent.ACTION_DOWN ){// KeyDown事件入口,
                    if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){// 进度条往左边tuo'dong
                       
                        if(!isStartMove){
                            handleMove(false);
                            isStartMove = true;
                        }

                        return true;
                    }else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){// 进度条往右边拖动            
                        if(!isStartMove){
                            isStartMove = true;
                            handleMove(true);
                        }
                        return true;
                    }
                }

                if(event.getAction() == KeyEvent.ACTION_UP){
                    isStartMove = false;
                    mHandler.removeCallbacks(moveAddRunnable);//移出所有runnable
                    mHandler.removeCallbacks(moveSubRunnable);
                }
                return false;
            }
        });

private Runnable moveAddRunnable = new Runnable() {//向右拖动进度条
        @Override
        public void run() {
            int duration = mVideoView.getDuration();
            Log.i(TAG,"moveAddRunnable -------------------");
            int progress = (int) (mPb.getProgress()+ duration * 0.005);
            mPb.setProgress(progress);
            mHandler.postDelayed(moveAddRunnable,50);
        }
    };

    private Runnable moveSubRunnable = new Runnable() {//向左拖动进度条
        @Override
        public void run() {
            int duration = mVideoView.getDuration();
            Log.i(TAG,"moveSubRunnable -------------------");
            int progress = (int) (mPb.getProgress()- duration * 0.005);
            mPb.setProgress(progress);
            mHandler.postDelayed(moveSubRunnable,50);
        }
    };
    private void handleMove(boolean isAdd) {
        if(isAdd){
            mHandler.post(moveAddRunnable);
        }else {
            mHandler.post(moveSubRunnable);
        }
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值