VerticalSeekBar 几行代码实现垂直进度条

有哪些优点:

  • 继承自原生SeekBar,显示效果与原生相当
  • 核心代码只有20行左右,无侵入,使用Api跟原生别无二致
  • 兼容性好,不同于网上使用旋转实现的方案,某些场景下有各种各样的bug

上个效果图(参考MIUI12配色)

Demo点我

image

代码

/**
 * author: mtdhllf
 * time  : 2020/04/28 9:57
 * desc  :
 */
class VerticalSeekBar : AppCompatSeekBar {

    private var mOnSeekBarChangeListener: OnSeekBarChangeListener? = null

    override fun setOnSeekBarChangeListener(l: OnSeekBarChangeListener) {
        mOnSeekBarChangeListener = l
        super.setOnSeekBarChangeListener(l)
    }

    @SuppressLint("ClickableViewAccessibility")
    override fun onTouchEvent(event: MotionEvent?): Boolean {
        if (!isEnabled) {
            return false
        }
        parent.requestDisallowInterceptTouchEvent(true)
        when (event!!.action) {
            MotionEvent.ACTION_DOWN -> {
                mOnSeekBarChangeListener?.onStartTrackingTouch(this)
                val i = max - (max * event.y * 1f / height).toInt()
                progress = i
                if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
                    parent.requestDisallowInterceptTouchEvent(false)
                    mOnSeekBarChangeListener?.onStopTrackingTouch(this)
                }
            }
            MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP -> {
                val i = max - (max * event.y * 1f / height).toInt()
                progress = i
                if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
                    parent.requestDisallowInterceptTouchEvent(false)
                    mOnSeekBarChangeListener?.onStopTrackingTouch(this)
                }
            }
        }
        return true
    }

    constructor(ctx: Context) : super(ctx)

    constructor(ctx: Context, attrs: AttributeSet?) : this(ctx, attrs, 0)

    constructor(ctx: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(ctx, attrs, defStyleAttr)

    init {
        thumb = null
    }

    override fun onDetachedFromWindow() {
        super.onDetachedFromWindow()
        mOnSeekBarChangeListener = null
    }

}

声明

转载请注名出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天这一天,心情特别复杂,第一次成为要被下课的人,我内心深处有极大的恐惧,连续两次练习失败,都源于恐惧。马上要被下...
    楚楚蒙阅读 111评论 1 1
  • 龙是中国等东亚区域古代神话传说中的神异动物,为鳞虫之长。常用来象征祥瑞,是中华民族等东亚民族最具代表性的传统文化之...
    蒲公英有约阅读 883评论 0 0
  • 龙言再次睁开眼,发现自己身处一间装饰的颇华丽的屋子里。 四周静悄悄的,龙言感觉自己的脑袋快炸开了。他挣扎着爬下床,...
    花木流年阅读 254评论 0 1
  • 晨读框架图 选择目标,做足准备 首先,找到最想做的事情,兴趣有了更容易坚持下去。然后,做好充分的准备,不给自己任何...
    一半一半zyh阅读 241评论 0 1