ProgessBar与ObjectAnimator的进度太快

时间:2019-07-12 13:45:07

标签: android

我正在尝试设置进度条的动画,以便线性填充需要1分钟。

这是我的代码:

const array1 = [
  { kind: "E", path: ["short_name"], lhs: "testing", rhs: "testing1" },
  { kind: "E", path: ["agent_name"], lhs: "testing", rhs: "testing2" }
];

const array2 = [
  { lhs: "legacyId", rhs: "id_number" },
  { lhs: "name.short", rhs: "short_name" },
  { lhs: "name.long", rhs: "agent_name" },
  { lhs: "gender", rhs: "gender" },
  { lhs: "dob", rhs: "date_of_birth" }
];

const hashMap = {};
const commonValues = [];

for (let i = 0; i < array1.length; i++) {
  const currentValue = array1[i].path[0];
  hashMap[currentValue] = true;
}

for (let i = 0; i < array2.length; i++) {
  const currentValue = array2[i].rhs;
  if (hashMap[currentValue]) commonValues.push(currentValue);
}

//now commonValues contains all of the common between them. You may want to filter out duplicate matches, depends on your use case. 

进度条填充时间太快,大约需要20秒,而不是1分钟

2 个答案:

答案 0 :(得分:1)

在“开发人员选项”下,有“动画师持续时间比例”选项。这可能是导致您出现问题的原因。

希望有帮助。

答案 1 :(得分:0)

问题是由Android的“开发人员选项”下的动画持续时间比例设置为0.5引起的。

ValueAnimator类中有一个 setDurationScale()方法。它是隐藏的,但是 您可以使用反射来调用它,并使用它将持续时间比例设置为1:

try {
    ValueAnimator.class.getMethod("setDurationScale", float.class).invoke(null, 1f);
} catch (Throwable t) {
    Log.e(this.getClass().getName(), t.getMessage());
}

这将使ObjectAnimator不受全局动画师持续时间比例的影响。

如果您需要保存动画持续时间比例的当前选项值:

// Get duration scale from the global settings.
float durationScale = Settings.Global.getFloat(context.getContentResolver(),
                        Settings.Global.ANIMATOR_DURATION_SCALE, 0);