取色器:
/**
*
* *-----------------------------*
* | *** 取色器 *** |
* *-----------------------------*
*
* 编辑修改收录:fengzi(疯子、wu341、wgq341)
*
* 不会写代码,我是代码搬运工。
* 联系方式:QQ(493712833)。
*
* 随 笔: https://www.cnblogs.com/fengziwu/
*
* 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。
* 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。
* 日 期: 2019.05.08
*
* ---------------------- 实例 --------------------------- *
* 实例ColorPicker
* 鼠标按下色块,返回一个16进制颜色值
import fengzi.colors.ColorPicker;
var s:ColorPicker=new ColorPicker();
addChild(s);
s.addEventListener("color.down",colorDownHandler);
function colorDownHandler(event:Event):void
{
trace(event.target.colorStr)
}
*/
package fengzi.colors
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class ColorPicker extends Sprite
{
static public const COLOR_DOWN:String = "color.down";
private var colorarr:Array = [0x000000,0x333333,0x666666,0x999999,0xcccccc,0xffffff,0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,0xff00ff];
private var rectW:int;
private var rectH:int;
//**** 每一个颜色块的边框颜色(可以修改的参数)
private var borderColor:uint = 0x000000;
private var colorTxt:String;
/**
* ColorPicker 取色器
* @param rectW 色块宽
* @param rectH 色块高
*/
public function ColorPicker(rectW:int=15,rectH:int=15):void
{
this.rectW = rectW;
this.rectH = rectH;
getColorSpr();
}
private function getColorSpr():void
{
//// 颜色的最大值,用于循环生成颜色块时候作为判断条件
var RMax:uint = 255;
var GMax:uint = 255;
var BMax:uint = 255;
var step:uint = 255 / 5;
// 用于设置六个大的颜色块的区域坐标位置
var areaX:int = 0;
var areaY:int = 0;
// 颜色选择器容器对象
var colorP:Sprite = new Sprite ;
//// 循环生成每一个颜色对象
for (var r:uint = 0; r <= RMax; r += step)
{
// 生成六大颜色区域
var sp6:Sprite = new Sprite ;
colorP.addChild(sp6);
// 用于设置每一个颜色块的坐标位置
var rectX:int = 0;
var rectY:int = 0;
for (var g:uint = 0; g <= GMax; g += step)
{
for (var b:uint = 0; b <= BMax; b += step)
{
//// 生成单独的颜色块,并设置坐标位置
var rectSP:Sprite = new Sprite ;
makeRect(rectSP,makeColor(r,g,b),borderColor,rectW,rectH);
rectSP.x = rectX;
rectSP.y = rectY;
sp6.addChild(rectSP);
rectY += rectH;
}
rectX += rectW;
rectY = 0;
}
//// 设置六个颜色区域的坐标
sp6.x = areaX % sp6.width * 3 + 15;
sp6.y = areaY;
areaX += sp6.width;
areaY = Math.floor((areaX / sp6.height * 3)) * sp6.height;
}
for (var i:int = 0; i < colorarr.length; i++)
{
var s:Sprite = new Sprite ;
makeRect(s,colorarr[i],borderColor,rectW,rectH);
s.y = rectH * i;
colorP.addChild(s);
}
addChild(colorP);
}
private function makeRect(spr:Sprite,color:uint,bColor:uint,recW:int,recH:int):Sprite
{
spr.graphics.lineStyle(0.1,bColor);
spr.graphics.beginFill(color);
spr.graphics.drawRect(0,0,recW,recH);
// 给每一个颜色块添加点击事件
spr.name = String(color);
addMouse(spr);
return spr;
}
// 生成颜色
private function makeColor(rr:uint,gg:uint,bb:uint):uint
{
return rr * 16 * 16 * 16 * 16 + gg * 16 * 16 + bb;
}
// 给每一个颜色块添加点击事件
private function addMouse(spr:Sprite):void
{
// 不要用CLICK事件,因为鼠标点击和移动速度过快之后,用于按下和释放时候不在同一个对象,会导致事件侦听函数没有按照想象中那么执行
spr.addEventListener(MouseEvent.MOUSE_DOWN,function ( eve : MouseEvent ) : void
{
var num : int = 6 - int( eve.currentTarget.name ).toString(16).length;
var str : String = "0x";
for ( var i : int = 0; i < num; i++ )
{
str += "0";
}
colorTxt= str + String( int( eve.currentTarget.name ).toString(16) ).toLocaleUpperCase();
dispatchEvent(new Event(COLOR_DOWN));
});
}
/***
* @colorStr 返回一个16进制颜色值(0xff00ff)
***/
public function get colorStr():String
{
return colorTxt;
}
}
}
原文:https://www.cnblogs.com/fengziwu/p/10908949.html