什么叫展示型网站,第一次跑业务怎么找客户,专科最吃香的十大专业,遵义网站建设优化公司SeekBar 在开发中并不陌生,默认的SeekBar是不显示进度的,当然用吐司或者文案在旁边实时显示也是可以的,那能不能移动的时候才显示#xff0c;默认不显示呢,当然网上花哨的三方工具类太多了#xff0c;但是我只是单纯的想在SeekBar的基础上去添加一个可以跟随移动显示的气泡而…SeekBar 在开发中并不陌生,默认的SeekBar是不显示进度的,当然用吐司或者文案在旁边实时显示也是可以的,那能不能移动的时候才显示默认不显示呢,当然网上花哨的三方工具类太多了但是我只是单纯的想在SeekBar的基础上去添加一个可以跟随移动显示的气泡而已~
先看一下效果 这篇文章可能会满足你的需求 1.原生SeekBar使用无需重写 2.改动量少不会对控件有任何影响 3.使用灵活, Utils使用复制粘贴即可使用
先说一下原理吧 1.首先最最基础的就是怎么样在不做到对原有控件产生影响的情况下去显示呢 答: PopupWindow它只需要拿到对应的目标控件即可指定显示位置 2.如何去跟随移动呢? 答:PopupWindow本身不会动态移动只需要在该弹窗里面设置一个控件让该控件移动即可
具体实现 拿到控件用PopupWindow显示在该控件附近根据SeekBar的进度动态设置该弹窗里面子控件的位置
使用
这里是SeekBar移动监听在这里的三个方法加上对应的方法即可 mDataBind.controlVolumeSeekbar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener{override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {//滑块移动SeekBarPopUtils.move(progress,seekBar!!)}override fun onStartTrackingTouch(seekBar: SeekBar?) {//滑块按下SeekBarPopUtils.showPop(seekBar!!)}override fun onStopTrackingTouch(seekBar: SeekBar?) {//滑块松开SeekBarPopUtils.dismiss()}})SeekBarPopUtils 代码
注意Kotlin写的新建文件的时候要建Kotlin文件
/*** SeekBar移动时弹出对应的气泡加数字*/
SuppressLint(StaticFieldLeak)
object SeekBarPopUtils {private var popWin: PopupWindow? nullprivate var clPopPar: ConstraintLayout? nullprivate var tvPopTxt: TextView? nullfun showPop(seekBar: SeekBar){popWin PopupWindow()val mPopView LayoutInflater.from(BaseApplication.getContext()).inflate(R.layout.item_popup_win,null,false)clPopPar mPopView.findViewByIdConstraintLayout(R.id.cl_pop_par)tvPopTxt mPopView.findViewByIdTextView(R.id.tv_pop_txt)popWin?.contentView mPopViewpopWin?.height AppHelper.dp2px(30)popWin?.width seekBar.widthpopWin?.showAsDropDown(seekBar,0,-(AppHelper.dp2px(30) popWin!!.height))}fun move(progress: Int,seekBar: SeekBar){val tvPopWidth AppHelper.dp2px(40)val params: ConstraintLayout.LayoutParams ConstraintLayout.LayoutParams(tvPopWidth, AppHelper.dp2px(30))params.startToStart clPopPar!!.idparams.marginStart (seekBar.width - tvPopWidth)/100 * progress tvPopWidth/3tvPopTxt?.layoutParams paramstvPopTxt?.text progress.toString()}fun dismiss(){popWin?.dismiss()popWin nullclPopPar nulltvPopTxt null}}item_popup_win 代码
?xml version1.0 encodingutf-8?
androidx.constraintlayout.widget.ConstraintLayoutandroid:idid/cl_pop_parxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_height30dpxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsTextViewandroid:idid/tv_pop_txtandroid:layout_widthdimen/dimen_40android:layout_heightmatch_parentandroid:gravitycenterapp:layout_constraintStart_toStartOfparentandroid:backgrounddrawable/bg_ffffff_12android:textSizedimen/sp_16android:textColorcolor/blacktools:text 999//androidx.constraintlayout.widget.ConstraintLayoutAppHelper.dp2px fun dp2px(dpVal: Int): Int {return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal.toFloat(),BaseApplication.getContext().resources.displayMetrics).toInt()}