setValue(value, opt_formattedValue) {
    this.value_ = value;
    this.formattedValue_ = opt_formattedValue || null;

    this.stopAnimation_();  // Stop the active animation if exists

    // Compute desired value position (normalize value to range 0-1)
    const valuePosition = this.valueToRangePosition_(value);
    if (this.needleValuePosition_ == null) {
      // No animation on initial display
      this.needleValuePosition_ = valuePosition;
      this.drawValue_();
    } else {
      // Animate move
      this.animation_ = new Animation(
          [this.needleValuePosition_], [valuePosition], NEEDLE_MOVE_TIME,
          easing.inAndOut);

      const events = [
        Transition.EventType.BEGIN, Animation.EventType.ANIMATE,
        Transition.EventType.END
      ];
      googEvents.listen(this.animation_, events, this.onAnimate_, false, this);
      googEvents.listen(
          this.animation_, Transition.EventType.END, this.onAnimateEnd_, false,
          this);

      // Start animation
      this.animation_.play(false);
    }

    const element = this.getElement();
    if (element) {
      aria.setState(element, 'valuenow', this.value_);
    }
  }
Sets the current value range displayed by the gauge.
@param {number} value The current value for the gauge. This value
    determines the position of the needle of the gauge.
@param {string=} opt_formattedValue The string value to show in the gauge.
    If not specified, no string value will be displayed.