docs: @Nullable
      @Override
      public Animator createAnimator(@NonNull ViewGroup sceneRoot, @Nullable TransitionValues startValues,
                                     @Nullable TransitionValues endValues) {
          if (startValues == null || endValues == null) {
              return null;
          }
          Rect startBounds = (Rect) startValues.values.get(PROPNAME_BOUNDS);
          Rect endBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS);
          if (startBounds == null || endBounds == null) {
              return null;
          }
  
          Matrix startMatrix = (Matrix) startValues.values.get(PROPNAME_MATRIX);
          Matrix endMatrix = (Matrix) endValues.values.get(PROPNAME_MATRIX);
  
          boolean matricesEqual = (startMatrix == null && endMatrix == null) ||
                  (startMatrix != null && startMatrix.equals(endMatrix));
  
          if (startBounds.equals(endBounds) && matricesEqual) {
              return null;
          }
  
          ImageView imageView = (ImageView) endValues.view;
          Drawable drawable = imageView.getDrawable();
          int drawableWidth = drawable.getIntrinsicWidth();
          int drawableHeight = drawable.getIntrinsicHeight();
  
          ObjectAnimator animator;
          if (drawableWidth == 0 || drawableHeight == 0) {
              animator = createMatrixAnimator(imageView, new MatrixUtils.NullMatrixEvaluator(),
                      MatrixUtils.IDENTITY_MATRIX, MatrixUtils.IDENTITY_MATRIX);
          } else {
              if (startMatrix == null) {
                  startMatrix = MatrixUtils.IDENTITY_MATRIX;
              }
              if (endMatrix == null) {
                  endMatrix = MatrixUtils.IDENTITY_MATRIX;
              }
              MatrixUtils.animateTransform(imageView, startMatrix);
              animator = createMatrixAnimator(imageView, new MatrixUtils.MatrixEvaluator(),
                      startMatrix, endMatrix);
          }
          return animator;
      }