【发布时间】:2017-03-02 08:42:03
【问题描述】:
我得到一个片段,它有一个名为RingProgress 的控件,它只是一个根据给定百分比值填充自身的环。例如,如果我这样做:
ringProgress.setProgress(20);
这意味着现在将填充 20% 的环。
我想要做的是在几秒钟内为填充的环设置动画。所以我试图做的是:
@Override
public void onResume()
{
super.onResume();
HandlerThread handlerThread = new HandlerThread("countdown");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable()
{
@Override
public void run()
{
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
int totalSeconds = secondsToStart + minutesToStart * 60;
int secondsPassed = 0;
@Override
public void run()
{
if(secondsPassed == totalSeconds)
{
timer.cancel();
}
final int currentProgress = (secondsPassed / totalSeconds) * 100;
secondsPassed++;
getActivity().runOnUiThread(new Runnable()
{
@Override
public void run()
{
mRingProgressBar.setProgress(currentProgress);
}
});
}
}, 0, 1000);
}
});
}
问题是直到时间到了才显示戒指的更新。例如,如果我将其设置为 5 秒,那么当片段加载时,环设置为 0,然后 5 秒内没有任何反应,然后环立即充满 100%..
如何正确启动此动画?
【问题讨论】:
-
您是否应用了日志记录/断点来查看是否调用了所有内容?
-
ringProgress.setProgress(20);仅当您设置ringProgress.setMax(100)时才会为 20%; -
是否必须通过处理程序执行?
-
不,它不是强制性的。它只是我试图在不同的线程中制作动画
-
@dumazy 是的,一切都被称为
标签: android android-animation android-runonuithread