if(android.os.Build.VERSION.SDK_INT >= 11){
// will update the "progress" propriety of seekbar until it reaches progress
ObjectAnimator animation = ObjectAnimator.ofInt(seekbar, "progress", progress);
animation.setDuration(500); // 0.5 second
animation.setInterpolator(new DecelerateInterpolator());
animation.start();
}
else
seekbar.setProgress(progress); // no animation on Gingerbread or lower
如果您的最低SDK是Gingerbread或更低版本,请添加:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
// or
@SuppressLint("NewApi")
6条答案
按热度按时间p5fdfcr11#
插值器必须附加到动画,这将仅适用于Hive或更高版本:
如果您的最低SDK是Gingerbread或更低版本,请添加:
到您的函数/类。
我使用了减速插值器,但这是可选的,还有其他可能性。
yhived7q2#
下面是一个独立的解决方案:
在布局中将
ProgressBar
替换为AnimatingProgressBar
您还可以将类型更改为AnimatingProgressBar,以利用
setAnimate()
禁用动画(在恢复活动状态时可能很有用)kqhtkvqz3#
如果你每次改变进度值1(例如从45到46),你将看不到动画。最好改变进度100点,为此你只需要把你的最大值乘以100,每个进度值也乘以100。例如:
4ktjp1zp4#
我想出了如何做到这一点,通过使用一个runnable我能够更新进度条几次一秒钟,所以给予滑动效果。代码如下:
在这里,“track”跟踪已经完成了多少增量,increase是应该完成的增量的总数。我可以从UI线程动态增加增量的数量,以给予平滑的效果。该代码只适用于不需要减少的进度条。
要运行它,只需使用以下代码:
juud5qan5#
根据文档,内插器适用于不确定的进度。既然你设置了进度,我想你打算使用有值的常规进度。我想对你来说最好的是增加进度的最大值,并以较小的增量进行。
oxosxuxt6#
我不确定,但请检查: