Android 如何自定义一个垂直进度条,去移动动画(上下移动,移动范围有限制)

问题遇到的现象和发生背景

公司需求,左边需要自定义一个垂直进度条,右边是一个半截的车体,上面有个窗户,想通过拖动进度条然后窗户随之移动

问题相关代码,请勿粘贴截图

//自定义的seekbar
@SuppressLint("AppCompatCustomView")
public class VerticalSeekBar extends SeekBar {
public VerticalSeekBar(Context context) {

    super(context);
}

public VerticalSeekBar(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public VerticalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(h, w, oldh, oldw);
}

@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(heightMeasureSpec, widthMeasureSpec);
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}

protected void onDraw(Canvas canvas) {
    canvas.rotate(-90);
    canvas.translate(-getHeight(), 0);
    //getProgressDrawable().setAlpha(0);
    super.onDraw(canvas);
}

@Override
public synchronized void setProgress(int progress) {
    super.setProgress(progress);
    onSizeChanged(getWidth(), getHeight(), 0, 0);
}

public void setInCrease(int increase){
    setProgress(getProgress() + increase);
}

public void setProgressDrawableAlpha(int alpha){
    getProgressDrawable().setAlpha(alpha);
}

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled()) {
        return false;
    }

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_MOVE:
            int i=0;
            i=getMax() - (int)(getMax() * event.getY() / getHeight());
            setProgress(i);
            Log.i("Progress",getProgress()+"");
            onSizeChanged(getWidth(),getHeight(), 0, 0);
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
    }
    return true;
}

}

//mainactivity里的相关操作
skylightSeekbar!!.setOnSeekBarChangeListener(object :SeekBar.OnSeekBarChangeListener{
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {

        }

        override fun onStartTrackingTouch(seekBar: SeekBar?) {
        }

        override fun onStopTrackingTouch(seekBar: SeekBar?) {
            Log.i("zyl","start animation")

// if (seekBar!!.progress<20) return
AnimationUtil.skylightAnim(ivWindSky!!)
}
})

我的解答思路和尝试过的方法

我先去写了一个自定义的seekbar(如上面VerticalSeekBar),上面这个自定义方法可以显示出垂直的seekbar,但是seekbar里的一些东西无法使用,

我想要达到的结果

如图:https://img-mid.csdnimg.cn/release/static/image/mid/ask/071260114546126.png

seekBar或者progressBar都可以你所说的seekBar的一些东西无法使用,具体是哪些呢?