要实现用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);            }        }


   

更多相关文章

  1. Android(安卓)嵌套滑动机制(NestedScrolling)
  2. Android(安卓)序列化(Serializable)出现错误 java.lang.RuntimeE
  3. Android(安卓)Studio自动化快速实现Parcelable接口序列化
  4. 如何申请google map api key
  5. Android中AIDL的使用详解
  6. Android的ScrollView简单使用实例(附Demo)
  7. [置顶] Android(安卓)编码规范 | 代码风格指南
  8. Android(安卓)webview 监听是否滚动到底部
  9. Android(安卓)activity简单跳转动画(overridePendingTransition)

随机推荐

  1. Android之NDK开发
  2. Android自带的时间空间和日期控件
  3. 【Android】Android中 Paint 字体、粗细
  4. android 的多任务之道(个人渣水平,无责任
  5. Android处理后台返回数据——Json转实体
  6. android sdk+eclipse+adt 配置与开发
  7. ImageView 设置 maxWidth/maxHeight 和 a
  8. Android之NDK开发
  9. Android在shell环境下运行linux命令
  10. 一、Android基本常识——Android项目创建