时移拖动进度条不流畅

来源:互联网 发布:冬季裤子不要淘宝款 编辑:程序博客网 时间:2024/04/27 10:28

时移拖动进度条不流畅

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);        }    }





阅读全文
0 0
原创粉丝点击