在搜寻栏中的两个连续进度点之间添加平滑动画

时间:2018-12-29 16:44:52

标签: android android-animation android-seekbar

设置进度时,例如从1到2的进度,我试图平滑地为搜索栏设置动画。

我尝试使用带插值器的ObjectAnimator设置动画,但是只能在进度点之间移动。不能将搜寻栏的最大值设置为较高的值以使滚动更流畅。

我确实找到了setProgress的版本- setProgress(int进度,                 布尔动画)。它会在连续的进度点之间为搜索栏动画化。

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

任何有关如何获得可自定义此类动画属性的结果的解决方案?

1 个答案:

答案 0 :(得分:0)

解决方案是将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();
}

现在,用户只能选择几个值,并且动画仍然可以顺利完成。希望对您有帮助。