Android 在seekbar中的两个连续进度点之间添加平滑动画

Android 在seekbar中的两个连续进度点之间添加平滑动画,android,android-animation,android-seekbar,Android,Android Animation,Android Seekbar,当设置进度时,我试图平滑地设置seekbar的动画,比如从1到2的进度 我尝试过使用带有插值器的ObjectAnimator设置动画,但这只会在进度点中移动。将seekbar的最大值设置为更平滑滚动的高值不是一个选项 我确实找到了setProgress的一个版本-setProgress(int progress, boolean animate)在连续的进度点之间,按我所希望的方式为seekbar设置动画 但不可能像ObjectAnimator那样设置持续时间或自定义动画 关于如何实现自定义此类

当设置进度时,我试图平滑地设置seekbar的动画,比如从1到2的进度

我尝试过使用带有插值器的ObjectAnimator设置动画,但这只会在进度点中移动。将seekbar的最大值设置为更平滑滚动的高值不是一个选项

我确实找到了setProgress的一个版本-setProgress(int progress, boolean animate)在连续的进度点之间,按我所希望的方式为seekbar设置动画

但不可能像ObjectAnimator那样设置持续时间或自定义动画


关于如何实现自定义此类动画属性的结果的任何解决方案?

解决方案是将ProgressBar的最大值设置得非常高。要确保用户仍然只能以更大的步骤拾取值,请设置onSeekBarChangeListener并将输入值四舍五入,然后将此值设置为进度

假设您有一个ProgressBar,用户可以在其中选择0到10。开始时,选择了2

seekBar = findViewById(R.id.seekBar);
seekBar.setMax(10*100);
seekBar.setProgress(2*100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        //if the progress change is triggered by the user, update progress to closest value
        if (fromUser) {
            seekBar.setProgress(Math.round((float)progress / 100) * 100);
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});
然后通过ObjectAnimator触发动画:

public void animateSeekbar(int toProgress) {
    ObjectAnimator animation = ObjectAnimator.ofInt(seekBar, "progress", toProgress*100);
    animation.setDuration(1000);
    animation.start();
}

现在用户只能拾取几个值,动画仍然可以顺利完成。希望这对您有所帮助。

我正在使用一个自定义seekbar,其中设置最大值会自动将离散seekbar点设置为整数。如果最大值为100,则会出现从1到100的数字。这就是为什么这不是一个选择。但我想既然没有其他办法,我就必须改变我的习惯搜索吧。我明白。作为最后一次尝试,您可以尝试方法
seekbar.incrementProgressBy(100)
。我不知道它是否以及如何工作,因为我没有找到任何关于此方法的文档,但它应该设置SeekBar的步长,并可能导致SeekBar在此步长中绘制其指示点。