设置进度时,例如从1到2的进度,我试图平滑地为搜索栏设置动画。
我尝试使用带插值器的ObjectAnimator设置动画,但是只能在进度点之间移动。不能将搜寻栏的最大值设置为较高的值以使滚动更流畅。
我确实找到了setProgress的版本- setProgress(int进度, 布尔动画)。它会在连续的进度点之间为搜索栏动画化。
但是不能像ObjectAnimator那样设置持续时间或自定义动画。
任何有关如何获得可自定义此类动画属性的结果的解决方案?
答案 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();
}
现在,用户只能选择几个值,并且动画仍然可以顺利完成。希望对您有帮助。