Scale extends Visibility { @VisibleForTesting @Size(2) static float[] obtainStartScales(final TransitionValues startValues, final float defaultStartX, final float defaultStartY) { final float[] startScales = new float[]{defaultStartX, defaultStartY}; if (startValues == null) { return startScales; } final Float startX = (Float) startValues.values.get(PROPERTY_TRANSITION_SCALE_X); if (startX != null) { startScales[0] = startX; } final Float startY = (Float) startValues.values.get(PROPERTY_TRANSITION_SCALE_Y); if (startY != null) { startScales[1] = startY; } return startScales; } Scale();  Scale(@ScaleMode final int mode);  Scale(@NonNull final Context context, @Nullable final AttributeSet attrs); @Nullable static Animator createAnimator(
			@NonNull final View view,
			@FloatRange(from = MIN, to = MAX) final float startScale,
			@FloatRange(from = MIN, to = MAX) final float endScale
	); @Nullable static Animator createAnimator(
			@NonNull final View view,
			@FloatRange(from = MIN, to = MAX) final float startScaleX,
			@FloatRange(from = MIN, to = MAX) final float startScaleY,
			@FloatRange(from = MIN, to = MAX) final float endScaleX,
			@FloatRange(from = MIN, to = MAX) final float endScaleY
	); void setPivotX(@Nullable final Float pivotX); @Nullable Float getPivotX(); void setPivotY(@Nullable final Float pivotY); @Nullable Float getPivotY(); void setPivotXFraction(@FloatRange(from = 0, to = 1) final float fractionX); @FloatRange(from = 0, to = 1) float getPivotXFraction(); void setPivotYFraction(@FloatRange(from = 0, to = 1) final float fractionY); @FloatRange(from = 0, to = 1) float getPivotYFraction(); @Override void captureStartValues(@NonNull final TransitionValues transitionValues); @Override @Nullable Animator onAppear(
			@NonNull final ViewGroup sceneRoot,
			@NonNull final View view,
			@Nullable final TransitionValues startValues,
			@Nullable final TransitionValues endValues
	); @Override @Nullable Animator onDisappear(
			@NonNull final ViewGroup sceneRoot,
			@NonNull final View view,
			@Nullable final TransitionValues startValues,
			@Nullable final TransitionValues endValues
	); static final float MIN; static final float MAX; static final String PROPERTY_SCALE_X; static final String PROPERTY_SCALE_Y; static final TimeInterpolator INTERPOLATOR; }
@Test public void testObtainStartScales() { final TransitionValues values = new TransitionValues(); values.values.put(Scale.PROPERTY_TRANSITION_SCALE_X, 0.15f); values.values.put(Scale.PROPERTY_TRANSITION_SCALE_Y, 0.95f); final float[] scales = Scale.obtainStartScales(values, 0.5f, 0.25f); assertThat(scales, is(notNullValue())); assertThat(scales.length, is(2)); assertThat(scales[0], is(0.15f)); assertThat(scales[1], is(0.95f)); }
@Test public void testObtainStartScalesForEmptyTransitionValues() { final float[] scales = Scale.obtainStartScales(new TransitionValues(), 0.5f, 0.25f); assertThat(scales, is(notNullValue())); assertThat(scales.length, is(2)); assertThat(scales[0], is(0.5f)); assertThat(scales[1], is(0.25f)); }
@Test public void testObtainStartScalesForNullTransitionValues() { final float[] scales = Scale.obtainStartScales(null, 0.5f, 0.25f); assertThat(scales, is(notNullValue())); assertThat(scales.length, is(2)); assertThat(scales[0], is(0.5f)); assertThat(scales[1], is(0.25f)); }