android - 在搜索栏中的两个连续进度点之间添加流畅的动画

标签 android android-animation android-seekbar

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

我曾尝试使用带有插值器的 ObjectAnimator 设置动画,但它只在进度点移动。将搜索栏的最大值设置为较高的值以实现更平滑的滚动不是一种选择。

我确实找到了一个版本的 setProgress - setProgress (int progress, boolean animate) 在连续的进度点之间以我想要的方式为搜索栏设置动画。

但是无法像 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();
}

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

关于android - 在搜索栏中的两个连续进度点之间添加流畅的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971416/

相关文章:

android - 搜索栏中显示的音乐缓冲级别

android - Seekbar 只显示进度颜色而不显示背景颜色

android - 我可以在一个 Android drawable 中使用多个形状吗?

android - 从 IntentService 调用时,React native 事件无法发出

Android "swipe left to right to delete",列表项上的手势,ICS 样式

android-viewflipper 的简单淡出和淡入动画

Android:如何解决库依赖冲突

android - AChartEngine TimeSeries XAxis 时间网格设置

具有多个图像淡入淡出动画的android imageview

java - 如何在给定的不活动时间后隐藏 View