实现与seekbar随动的textview显示实时进度的实现

本文记录了在Android开发中如何在调整音量时,使TextView实时显示 SeekBar 的进度值,并通过两种不同的实现方式对比,找到更精确的解决方案。第一种方法通过计算 SeekBar 左端、TextView 宽度和当前进度来定位 TextView,但存在偏差;第二种方法考虑了Thumb的位置,从而提高了准确性。
摘要由CSDN通过智能技术生成

前几天接到一个需求需要再现在调整音量屏幕亮度时显示实时的数值,比较简单的一个功能,记录一下

刚看到这个需求时,采用了一种办法来实现textview跟随seekbar的thumb随动代码如下。

sb_voice.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar arg0) {
               
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) {
               

            }

            @Override
            public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
               
                resetViewTime();
                mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                volumnNumberDisplay.setText(String.valueOf(progress));
                float textWidth = volumnNumberDisplay.getWidth();
                float seekbatLeft = sb_voice.getLeft();
                float seekbarMax = Math.abs(sb_voice.getMax());
                final float scale = context.getResources().getDisplayMetrics().density;
                float thumb = 5*scale + 0.5f;
                float aveage = (((float)sb_voice.getWidth()) - 2 * thumb) / seekbarMax;
                float currentProgress = progress;
                float pox = seekbatLeft - textWidth/2 + thumb + aveage +currentProgress;
                volumnNumberDisplay.setX(seekbatLeft + currentProgress);
}

这种方法就是用seekbar最左端+texiview宽度的一半+当前进度来决定textview的位置,但是出来后效果出现了偏差,textview再每个进度出现的位置有一点偏差,于是就换了一种方法。

  sb_voice.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar arg0) {
     
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) {
               

            }

            @Override
            public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
                if (!isNotMute) return;
                Log.i("lvlin2","onProgressChanged");
                resetViewTime();
                mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                volumnNumberDisplay.setText(String.valueOf(progress));
                Log.i("lvlin2","voice_count" + progress);

                volumnNumberDisplay.setVisibility(View.VISIBLE);
                float thumbWidth = sb_voice.getThumb().getBounds().width();
                float thumbLeft = sb_voice.getThumb().getBounds().left;
                int marginStart = (int) (sb_voice.getLeft() + thumbLeft + thumbWidth / 2 - volumnNumberDisplay.getWidth() / 2 + 2);
                volumnNumberDisplay.setX(marginStart);
            }
        });

这种方法直接用seekbar最左端+thumb的最左端+thumb宽度的一半-textview宽度的一般。这样就实现了需求,也比第一种办法准确了很多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值