Scaling text is a funny thing. Generally, you won't get what you're asking for 
- smooth-scaling. The problem is that to display text in any reasonable way (in 
a way where it won't look completely ugly), graphics engines use things like 
font metrics, point sizes, font hints, sub-pixel anti-aliasing, and anything 
else they can to make it look readable. This is quite different from simple 
graphic objects. This means that when you 'scale' a text string, it will always 
try to display itself in a point size that's appropriate to the scale factor. 
And that means it's going to snap as it scales up and down, as it hits 
different point sizes.

This problem is related to why the text would simply disappear in Flex 3 when a 
text component was rotated or faded - by default, we would use a device font, 
and that engine just couldn't display the text in any reasonable manner when it 
was transformed or faded. (the workaround was to use an embedded font - I'm 
just illustrating the problems here...) This is different in Flex 4, since we 
use the new Flash player 10 text engine that uses software rendering for text 
and avoids the device rendering issues. But still, you'll get a much different 
looking text string when rotated than you will when it's not rotated, because 
various font display tricks break down when they're not linearly displayed.

The only workaround for this I know of is to attempt to capture the text as an 
image and scale that instead. In this case, draw your text component to some 
bitmap and swap it out for the duration of the effect.

But even that won't give you a nice result. That is, you'll get smooth scaling 
of the graphics (including the text), but the text won't look very good (for 
the simple reason that text drawn without all of the font tricks mentioned 
above tends to look horrible, and scaled bitmaps of the text will look even 
worse), and if you swap this scaled version of the text out for the real text 
when the effect finishes, you'll get a snapping artifact, as we go from the 
bitmap display of the text to the real display of the text at the appropriate 
point size. I'm pretty sure this isn't what you want either.

The best way I know of to deal with this harsh text reality is to work around 
it, and they way you do it depends on your situation. For example, you might 
just fade the text out at the start of the effect, scale up the text area, then 
fade it back in when it's done. This way you'll get good text display at the 
beginning and end, and will avoid the snapping artifacts as it scales. You 
could also do things like capture the text into a bitmap and scale it, but also 
apply a blur and/or fade, so that the user can see the text, but in such a way 
that the difference between the animated version and the before/after version 
is less jarring.

Hope that helps.

Chet.

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of ilikeflex
Sent: Thursday, September 24, 2009 8:47 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] How to make the effect smooth



Hi

I am using the below sample to increase the width and height but i want that 
the text should also transit smoothly.

Any pointers???

<?xml version="1.0" encoding="utf-8"?>
<!-- Simple example to demonstrate the Zoom effect. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";>

<mx:Parallel id="expand" target="{textBox}">
<mx:AnimateProperty property="scaleX" fromValue="1" toValue="2" duration="2000" 
/>
<mx:AnimateProperty property="scaleY" fromValue="1" toValue="2" duration="2000" 
/>
</mx:Parallel>

<mx:Parallel id="contract" target="{textBox}">
<mx:AnimateProperty property="scaleX" fromValue="2" toValue="1" duration="2000" 
/>
<mx:AnimateProperty property="scaleY" fromValue="2" toValue="1" duration="2000" 
/>
</mx:Parallel>

<mx:Panel title="Zoom Effect Example" width="95%" height="95%" 
horizontalAlign="center"
paddingTop="5" paddingLeft="10" paddingRight="10" paddingBottom="5">
<!--
<mx:HBox backgroundColor="blue" width="75" id="textBox">
<mx:Text width="100%" color="0xFFFFFF" fontWeight="bold" text="1234567890"/>
</mx:HBox>
-->
<mx:TextInput backgroundColor="blue" fontWeight="bold" color="0xFFFFFF" 
id="textBox" text="1234567890">

</mx:TextInput>
<mx:ControlBar>
<mx:Button label="Expand" click="expand.end(); expand.play();"/>
<mx:Button label="Contract" click="contract.end(); contract.play();"/>
</mx:ControlBar>

</mx:Panel>
</mx:Application>

Thanks
ilikeflex

Reply via email to