After dealing with the frustrations of the Resize effect for too long I decided to write my own replacement to it that works the way I would expect Resize should.
Major distinctions are support for resizing with percentages and supports the ability to resize one direction (width or height) with a different type (pixel or percentage) than the other. Here's the code: package jsl { import mx.effects.IEffectInstance; import mx.effects.TweenEffect; public class Resize extends TweenEffect { public function Resize(target:Object = null) { super(target); instanceClass = ResizeInstance; } [Inspectable(defaultValue=null)] public var widthFrom:Number; [Inspectable(defaultValue=null)] public var heightFrom:Number; [Inspectable(defaultValue=null)] public var widthTo:Number; [Inspectable(defaultValue=null)] public var heightTo:Number; [Inspectable(defaultValue=null)] public var widthType:String; [Inspectable(defaultValue=null)] public var heightType:String; override protected function initInstance(instance:IEffectInstance):void { super.initInstance(instance); var effectInstance:ResizeInstance = ResizeInstance(instance); effectInstance.widthFrom = widthFrom; effectInstance.heightFrom = heightFrom; effectInstance.widthTo = widthTo; effectInstance.heightTo = heightTo; effectInstance.widthType = widthType; effectInstance.heightType = heightType; } } } package jsl { import mx.effects.effectClasses.AnimatePropertyInstance; import mx.effects.effectClasses.TweenEffectInstance; public class ResizeInstance extends TweenEffectInstance { public var widthFrom:Number; public var heightFrom:Number; public var widthTo:Number; public var heightTo:Number; public var widthType:String; public var heightType:String; private var widthEffect:AnimatePropertyInstance; private var heightEffect:AnimatePropertyInstance; public function ResizeInstance(target:Object) { super(target); } override public function play():void { super.play(); initializeProperties(); if (widthEffect != null) widthEffect.play(); if (heightEffect != null) heightEffect.play(); } protected function initializeProperties():void { if ((!isNaN(widthTo)) && (widthType != 'auto')) { widthEffect = new AnimatePropertyInstance(target); widthEffect.duration = duration; widthEffect.repeatCount = repeatCount; widthEffect.repeatDelay = repeatDelay; widthEffect.startDelay = startDelay; widthEffect.easingFunction = easingFunction; if (widthType == 'pixel') { widthEffect.property = 'width'; } else if (widthType == 'percentage') { widthEffect.property = 'percentWidth'; } else { Logger.log('Unknown Width Property: ' + widthType); } if (!isNaN(widthFrom)) { widthEffect.fromValue = widthFrom; } else if ((widthType == 'percentage') && (isNaN(target['percentWidth']))) { // Trying to change percentage but a percentage is not currently determined var pW:Object = target['parent']; if (pW != null) { widthEffect.fromValue = (target['width'] / pW['width']) * 100; } } widthEffect.toValue = widthTo; } if ((!isNaN(heightTo)) && (heightType != 'auto')) { heightEffect = new AnimatePropertyInstance(target); heightEffect.duration = duration; heightEffect.repeatCount = repeatCount; heightEffect.repeatDelay = repeatDelay; heightEffect.startDelay = startDelay; heightEffect.easingFunction = easingFunction; if (heightType == 'pixel') { heightEffect.property = 'height'; } else if (heightType == 'percentage') { heightEffect.property = 'percentHeight'; } else { Logger.log('Unknown Height Property: ' + heightType); } if (!isNaN(heightFrom)) { heightEffect.fromValue = heightFrom; } else if ((heightType == 'percentage') && (isNaN(target['percentHeight']))) { // Trying to change percentage but a percentage is not currently determined var pH:Object = target['parent']; if (pH != null) { heightEffect.fromValue = (target['height'] / pH['height']) * 100; } } heightEffect.toValue = heightTo; } } } }