4.14.给一个Text 组件中的文本添加拖拽阴影

4.14.1. 问题
我想给TextArea 组件中的当前文字添加一个拖拽阴影。
4.14.2. 解决办法
使用BitmapData 对象来获取一份TextField 的拷贝,同时添加这个位图到父组件的一个偏移点来模拟阴影
4.14.3. 讨论
当你尝试显示一个TextArea 或者Text 组件中的当前内容的阴影图像,你只不过需要取得可以再现文本域中所有信息的位图,然后添加到父组件中就行了。移动图像稍微偏离中心同时降低透明度值来降低其亮度,这样就提供了正常的视觉效果。既然这样基于UIComponent类来创建一个自定义组件以便减少开发进程,让你从flash.display 包中直接读取和添加ActionScript 底层显示组件。The 取得位图数据及添加到位图的功能已经在4.10 节描述过了。
+展开
-ActionScript
package oreilly.cookbook
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.TextEvent;
import flash.text.TextField;
import mx.core.UIComponent;
public class TextDropShadow extends UIComponent
{
private var _useShadow:Boolean = false;
private var _shadowHolder:Bitmap;
private var _bitmapData:BitmapData;
private var _textField:TextField;
//这里,位图已经创建而且部署到了父组件的一个偏移点,来模拟一个阴影:
public function TextDropShadow()
{
super();
_shadowHolder = new Bitmap();
addChild(_shadowHolder);
_shadowHolder.x = 5;
_shadowHolder.y = 5;
_textField = new TextField();
_textField.type = "input";
_textField.addEventListener(TextEvent.TEXT_INPUT,
inputListener);
addChild(_textField);
}
//updateDisplayList 方法是一个覆写函数,用来绘出TextField 及其相关所有可视信息,包括文本和位图。
override protected function
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(_useShadow)
{
_bitmapData = new BitmapData(_textField.width,
_textField.height, true);
_bitmapData.draw(_textField);
_shadowHolder.bitmapData = _bitmapData;
_shadowHolder.alpha = 0.7;
}
}
private function inputListener(event:TextEvent):void
{
invalidateDisplayList();
}
public function set useShadow(value:Boolean):void
{
_useShadow = value;
}
public function get useShadow():Boolean
{
return _useShadow;
}
}
}

加支付宝好友偷能量挖...


评论(0)网络
阅读(77)喜欢(0)flash/flex/fcs/AIR