android ScrollView 与SeekBar结合使用
16lz
2021-01-26
要实现用SeekBar控制ScrollView滚动的位置,并且ScrollView滚动时也更新SeekBar的角度,需要继承ScrollView,实现一个新的类。可以使这个类实现 SeekBar.OnSeekBarChangeListener接口。
覆盖ScrollView的onScrollChanged方法并修改SeekBar.OnSeekBarChangeListener接口中的onProgressChanged方法。关键代码如下
int heightMeasure; @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); heightMeasure = getMeasuredHeight(); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); // When the user scrolls, we hide navigation elements. if (heightMeasure == 0) { Toast.makeText(getContext(), "heightMeansu = 0", Toast.LENGTH_SHORT).show(); } else { //获取ScrollView的第一个子View的高度,也就是ScorllView要展示的内容的高度 View firstChildView = getChildAt(0); int firstChildViewHeight = firstChildView.getHeight(); if(firstChildViewHeight==0){ Toast.makeText(getContext(), "firstChildViewHeight = 0", Toast.LENGTH_SHORT).show(); }else{ //计算出ScrollView所处位置占整体的百分比并设置为SeekBar mSeekView的值 int progress = (int) (t * 100.0f / (firstChildViewHeight- heightMeasure)); mSeekView.setOnSeekBarChangeListener(null); mSeekView.setProgress(progress); mSeekView.setOnSeekBarChangeListener(this); }// setNavVisibility(false); } } /** * SeakBar值改变时修改ScrollView位置 * @param seekBar * @param progress * @param fromUser */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (heightMeasure == 0) { Toast.makeText(getContext(), "heightMeansu = 0", Toast.LENGTH_SHORT).show(); } else { View firstChildView = getChildAt(0); int firstChildViewHeight = firstChildView.getHeight(); int y = (int) ((firstChildViewHeight - heightMeasure) * progress / 100.0f); scrollTo(0, y); } }
更多相关文章
- Android(安卓)嵌套滑动机制(NestedScrolling)
- Android(安卓)序列化(Serializable)出现错误 java.lang.RuntimeE
- Android(安卓)Studio自动化快速实现Parcelable接口序列化
- 如何申请google map api key
- Android中AIDL的使用详解
- Android的ScrollView简单使用实例(附Demo)
- [置顶] Android(安卓)编码规范 | 代码风格指南
- Android(安卓)webview 监听是否滚动到底部
- Android(安卓)activity简单跳转动画(overridePendingTransition)