根据标准的Android Wear UI,当用户在计时器完成之前再次点击它时,我正在尝试取消DelayedConfirmationView
上的确认动画。但是,仅提供了一种start()
方法,如 API 参考(可在此处下载(中所述。
我尝试了一种解决方法,即在取消时将 setTotalTimeMs()
设置为 0,这会立即完成动画 - 但现在永久显示完整的圆形边框!没有setCircleBorderWidth()
方法可以将边框减少到 0,即使有相应的 xml 声明 app:circle_border_width
。CircleImageView 超类中的 setProgress()
方法似乎也没有任何作用。
有没有人找到一种直接取消确认动画的方法,或者至少是一种将按钮设置为其原始状态(无边框(的解决方法?
为了完整性(虽然是部分的,因为按钮周围的圆圈仍然会粘住,直到您重新膨胀视图(,我发布了我必须用来停止计数器而不触发操作的代码。
@Override
public void onTimerSelected(View view) {
if(mRunning) {
mRunning = false;
delayedConfirmationView.setTotalTimeMs(0);
} else {
view.setPressed(true);
mRunning = true;
delayedConfirmationView.start();
}
}
@Override
public void onTimerFinished(View view) {
view.setPressed(false);
if (mRunning) {
mRunning = false;
performAction();
} else {
delayedConfirmationView.setTotalTimeMs(CONFIRMATION_TIME);
}
}
DelayedConfirmationView.reset()
可以完成这项工作。
您只需要像 cowst 在另一个答案中所做的那样跟踪运行状态。
谷歌在他们的样本中只是使用
mDelayedView.setListener(null(;
private DelayedConfirmationView mDelayedView;
...
mDelayedView = (DelayedConfirmationView) stub.findViewById(R.id.act_main__delayed_confirm);
...
private DelayedConfirmationView.DelayedConfirmationListener mDelayedViewListener = new DelayedConfirmationView.DelayedConfirmationListener()
{
@Override
public void onTimerFinished(View view)
{
Log.d(LOG_TAG, "onTimerFinished() : Time out launching reboot");
// User did not cancel, let's go
...
}
@Override
public void onTimerSelected(View parView)
{
// User canceled, abort the action
// Prevent onTimerFinished from being heard.
mDelayedView.setListener(null);
...
}
};