通话过程中设置seekbar的最小值
2015-03-09 20:16
330 查看
在通话过程中,按音量键会弹出一个SeekBar控制听筒音量,为了保证通话过程中听筒一直有声音,android默认设计按音量下键是不能调到最小的,但是手动拖动进度条却可以把拖动进度条到0,而听筒还会有声音,解决方案,就是去控制手动拖动进度条,在通话过程中,不能为0。
定位到:framework\base\core\java\android\view\VolumePanel.java ,此类实现了OnSeekBarChangeListener接口,重写了对应的方法
要设置在通话过程中,不能手动拖动到0,有两种思路:一是给seekbar设置最小值,但是seekbar默认是没有设置最小值的方法的,只有setMax(),设置最大值,seekbar默认最小值是0,那只要在手动拖动seekbar设置值的时候,给他加1,就相当于设置了最小值。
framewor/base/core/java/android/widget/AbsSeekBar.java中的触屏事件onTouchEvent()方法中,在对应的事件中,会调用到trackTouchEvent(event) 方法。
看到最后,就是触屏设置Seekbar的进度。只需要在setProgress的时候加上个最小值就可以了。所以解决方法:
在AbsSeekBar类中,加入设置最小值方法setMin()
在framework\base\core\java\android\view\VolumePanel.java类中,重写onStartTrackingTouch方法,该方法默认为空的。
定位到:framework\base\core\java\android\view\VolumePanel.java ,此类实现了OnSeekBarChangeListener接口,重写了对应的方法
要设置在通话过程中,不能手动拖动到0,有两种思路:一是给seekbar设置最小值,但是seekbar默认是没有设置最小值的方法的,只有setMax(),设置最大值,seekbar默认最小值是0,那只要在手动拖动seekbar设置值的时候,给他加1,就相当于设置了最小值。
framewor/base/core/java/android/widget/AbsSeekBar.java中的触屏事件onTouchEvent()方法中,在对应的事件中,会调用到trackTouchEvent(event) 方法。
private void trackTouchEvent(MotionEvent event) { final int width = getWidth(); final int available = width - mPaddingLeft - mPaddingRight; int x = (int)event.getX(); float scale; float progress = 0; if (isLayoutRtl() && mMirrorForRtl) { if (x > width - mPaddingRight) { scale = 0.0f; } else if (x < mPaddingLeft) { scale = 1.0f; } else { scale = (float)(available - x + mPaddingLeft) / (float)available; progress = mTouchProgressOffset; } } else { if (x < mPaddingLeft) { scale = 0.0f; } else if (x > width - mPaddingRight) { scale = 1.0f; } else { scale = (float)(x - mPaddingLeft) / (float)available; progress = mTouchProgressOffset; } } final int max = getMax(); progress += scale * max; setProgress((int) progress, true); }
看到最后,就是触屏设置Seekbar的进度。只需要在setProgress的时候加上个最小值就可以了。所以解决方法:
在AbsSeekBar类中,加入设置最小值方法setMin()
private int mMin = 0; public void setMin(int min){ mMin = min; }在trackTouchEvent(MotionEvent event)方法中改变
setProgress((int) progress + mMin, true); //加上最小值
在framework\base\core\java\android\view\VolumePanel.java类中,重写onStartTrackingTouch方法,该方法默认为空的。
public void onStartTrackingTouch(SeekBar seekBar) { final Object tag = seekBar.getTag(); if (tag instanceof StreamControl) { StreamControl sc = (StreamControl) tag; int progress = seekBar.getProgress(); if(sc.streamType == AudioSystem.STREAM_VOICE_CALL){ //判断是通话时 seekBar.setMin(1); //调用上边方法,设置最小值。 } Log.e(TAG, "onStartTrackingTouch progress = "+progress); } }
相关文章推荐
- 视频通话过程中的播放模式和缓冲设置
- Android控件之SeekBar 设置最小值非零
- 创建存储过程并设置自动执行
- java开发过程中环境变量的设置.
- SAMBA设置全过程
- 图解google adsense设置用西联快汇的全过程
- 创建ORACLE实例与设置监听器过程
- SQL SERVER2000 存储过程 设置传入参数默认值
- 最小的BabyLinux系统制作过程详解
- 为什么我的设置的div最小高度不对?
- Windows XP的星期显示的设置过程
- SPS安装过程中配置服务器场帐户设置页面不能正常显示以及IIS中SPS管理站点未配置成功问题的原因
- 从存储过程中读取参数设置
- CDMA模块上网设置的过程
- DB2-JAVA存储过程环境设置
- 设置列表框最小宽度且可随着内容变宽的方法
- 路由器配置基础--设置对话过程
- IBM技术专家标准模板设置过程
- DIV+CSS 布局一行两列,左列固定宽度,右列自适应宽度;设置最小宽度,窗口小的时候显示滚动条.
- Firefox - 附加软件 - Firebug - Script脚本视图 - 在页面加载过程中的脚本设置断点