老外写的一个类,直接贴上了:
import flash.filters.ColorMatrixFilter; import flash.text.TextField; public class TextFieldColor { private static const byteToPerc:Number = 1 / 0xff; private var $textField:TextField; private var $textColor:uint; private var $selectedColor:uint; private var $selectionColor:uint; private var colorMatrixFilter:ColorMatrixFilter; public function TextFieldColor(textField:TextField, textColor:uint = 0x000000, selectionColor:uint = 0x000000, selectedColor: uint = 0x000000) { $textField = textField; colorMatrixFilter = new ColorMatrixFilter(); $textColor = textColor; $selectionColor = selectionColor; $selectedColor = selectedColor; updateFilter(); } public function set textField(tf:TextField):void { $textField = tf; } public function get textField():TextField { return $textField; } public function set textColor(c:uint):void { $textColor = c; updateFilter(); } public function get textColor():uint { return $textColor; } public function set selectionColor(c:uint):void { $selectionColor = c; updateFilter(); } public function get selectionColor():uint { return $selectionColor; } public function set selectedColor(c:uint):void { $selectedColor = c; updateFilter(); } public function get selectedColor():uint { return $selectedColor; } private function updateFilter():void { $textField.textColor = 0xff0000; var o:Array = splitRGB($selectionColor); var r:Array = splitRGB($textColor); var g:Array = splitRGB($selectedColor); var ro:int = o[0]; var go:int = o[1]; var bo:int = o[2]; var rr:Number = ((r[0] - 0xff) - o[0]) * byteToPerc + 1; var rg:Number = ((r[1] - 0xff) - o[1]) * byteToPerc + 1; var rb:Number = ((r[2] - 0xff) - o[2]) * byteToPerc + 1; var gr:Number = ((g[0] - 0xff) - o[0]) * byteToPerc + 1 - rr; var gg:Number = ((g[1] - 0xff) - o[1]) * byteToPerc + 1 - rg; var gb:Number = ((g[2] - 0xff) - o[2]) * byteToPerc + 1 - rb; colorMatrixFilter.matrix = [rr, gr, 0, 0, ro, rg, gg, 0, 0, go, rb, gb, 0, 0, bo, 0, 0, 0, 1, 0]; $textField.filters = [colorMatrixFilter]; } private static function splitRGB(color:uint):Array { return [color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff]; } }