【lua教程】HSV配色盘教程
import "android.text.method.DigitsKeyListener"import "android.graphics.Color"
import "android.graphics.Shader$TileMode"
import "android.graphics.*"
import "android.graphics.drawable.shapes.*"
import "android.graphics.drawable.*"
import "android.graphics.Paint$Cap"
function rgb2hsv(color,hsv)
$hsv0=hsv
if not hsv
hsv=float
end
if type(color)=="string"
color=Color.parseColor(color)
end
Color.colorToHSV(color, hsv)
if hsv0
return hsv
else
return luajava.astable(hsv)
end
end
function hsv2rgb(hsv1,hsv2)
local hsv,alpha
if hsv2
alpha=hsv1
hsv=hsv2
else
alpha=255
hsv=hsv1
end
hsv=hsv%360
if type(hsv)=="table"
hsv=float(hsv)
end
$color=Color.HSVToColor(alpha,hsv)
return color
end
function HSV配色盘(color0,fun)
if type(color0)=="number"
color0=string.format("%0x",color0)
end
HSV_dialog=AlertDialog.Builder(this)
.setTitle("HSV配色盘")
if fun
HSV_dialog.setPositiveButton("确定",{onClick=lambda s:fun("#"..HSV_input.text,s)})
else
HSV_dialog.setPositiveButton("复制",{onClick=function(v)
activity.getSystemService(Context.CLIPBOARD_SERVICE).setText("#"..HSV_input.text)
Toast.makeText(activity, "复制成功",Toast.LENGTH_SHORT).show()
end})
end
HSV_dialog.setNegativeButton("取消",nil)
.setCancelable(false)
.setView(loadlayout{
LinearLayout;
padding="10dp";
orientation="vertical";
gravity="center";
{
CardView;
CardElevation="5dp";
layout_width="80dp";
layout_height="80dp";
backgroundColor=4294967295;
layout_marginTop="8dp";
radius="40dp";
id="HSV_card";
};
{
LinearLayout;
gravity="center";
layout_width="fill";
padding="5dp";
{
TextView;
textSize="18dp";
text="#";
backgroundColor=0;
textColor=0xff000000;
};
{
EditText;
id="HSV_input";
singleLine=true;
padding=0;
backgroundColor=0;
hint="FFFFFF";
textSize="18dp";
keyListener=DigitsKeyListener.getInstance("1234567890abcdefABCDEF")
};
};
{
SeekBar;
id="拖动H";
layout_width="280dp";
Max=360*2;
layout_margin="5dp";
};
{
SeekBar;
id="拖动S";
layout_width="280dp";
layout_margin="5dp";
Max=255;
};
{
SeekBar;
id="拖动V";
layout_width="280dp";
layout_margin="5dp";
Max=255
};
{
TextView;
id="HSV_value";
gravity="center";
layout_width="fill";
padding="5dp";
text="H:360.0 S:255 V:255";
};
}
)
.show()
local H,S,V=0,0,1
HSV_input.addTextChangedListener{
onTextChanged=function(s)
$s=tostring(s)
if #s==6
$n=tonumber("0xff"..s)
if HSV_lock
HSV_lock=nil
else
HSV_lock1=1
$hsv=rgb2hsv(n)
拖动H.Progress=tointeger(hsv*2)
拖动S.Progress=tointeger(hsv*255)
拖动V.Progress=tointeger(hsv*255)
H,S,V= hsv,hsv,hsv
刷新S()
刷新V()
end
HSV_card.backgroundColor=n
HSV_value.text="H:"..(tointeger(H*10)/10).." S:"..tointeger(S*255).." V:"..tointeger(V*255)
elseif #s>6
HSV_lock1=1
HSV_lock=nil
HSV_input.text=s:sub(-6,-1)
end
end
}
拖动H.post(function()
local w,h,tab,hsv,hk,hkdx=拖动H.width,拖动H.height,{},{0,1,1},{},拖动H.Thumb
for i=0,360*2
hsv=i/2
tab=hsv2rgb(hsv)
hk=PorterDuffColorFilter(tab,PorterDuff.Mode.SRC_ATOP)
end
$draw=LuaDrawable(function(c,p,s)
local w,h,pos=c.width,c.height,拖动H.Progress
c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
hkdx.setColorFilter(hk)
end)
拖动H.setProgressDrawable(draw);
draw.paint
.setDither(true)
.setAntiAlias(true)
.setStrokeCap(Cap.ROUND)
.setStrokeWidth(拖动H.height/8)
.setShadowLayer(8,0,0,0xff000000)
.setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
拖动H.setOnSeekBarChangeListener{
onProgressChanged=function()
H=拖动H.Progress/2
if HSV_lock1
HSV_lock1=nil
else
HSV_lock=1
HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
end
end,
onStopTrackingTouch=function()
刷新S()
刷新V()
end,
}
end)
function 刷新S()
拖动S.post(function()
$hkdx=拖动S.Thumb
local w,h,tab,hsv,hk=拖动S.width,拖动S.height,{},{H,1,1},{}
for i=0,255
hsv=i*(1/255)
tab=hsv2rgb(hsv)
hk=PorterDuffColorFilter(tab,PorterDuff.Mode.SRC_ATOP)
end
$draw=LuaDrawable(function(c,p,s)
local w,h,pos=c.width,c.height,拖动S.Progress
c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
hkdx.setColorFilter(hk)
end)
拖动S.setProgressDrawable(draw);
draw.paint
.setDither(true)
.setAntiAlias(true)
.setStrokeCap(Cap.ROUND)
.setStrokeWidth(拖动S.height/8)
.setShadowLayer(8,0,0,0xff000000)
.setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
拖动S.setOnSeekBarChangeListener{
onProgressChanged=function()
S=拖动S.Progress*(1/255)
if HSV_lock1
HSV_lock1=nil
else
HSV_lock=1
HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
end
end}
end)
end
-- 刷新S()
function 刷新V()
拖动V.post(function()
$hkdx=拖动V.Thumb
local w,h,tab,hsv,hk=拖动V.width,拖动V.height,{},{H,1,1},{}
for i=0,255
hsv=i*(1/255)
tab=hsv2rgb(hsv)
hk=PorterDuffColorFilter(tab,PorterDuff.Mode.SRC_ATOP)
end
$draw=LuaDrawable(function(c,p,s)
local w,h,pos=c.width,c.height,拖动V.Progress
c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
hkdx.setColorFilter(hk)
end)
拖动V.setProgressDrawable(draw);
draw.paint
.setDither(true)
.setAntiAlias(true)
.setStrokeCap(Cap.ROUND)
.setStrokeWidth(拖动V.height/8)
.setShadowLayer(8,0,0,0xff000000)
.setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
拖动V.setOnSeekBarChangeListener{
onProgressChanged=function()
V=拖动V.Progress*(1/255)
if HSV_lock1
HSV_lock1=nil
else
HSV_lock=1
HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
end
end}
end)
end
--刷新V()
HSV_input.text=(color0 or "FFFFFF"):upper():sub(-6,-1)
end
activity.setTheme(android.R.style.Theme_Material_Light_DarkActionBar)
--HSV配色盘()--弹出配色盘,默认白色,点击复制
--HSV配色盘("#00ff00")--弹出对话框,颜色代码,默认点击复制
HSV配色盘(0xFFA774FF,function(颜色,对话框)--弹出对话框,颜色代码,设置点击事件
print("你选择了",颜色,"颜色")
end)
页:
[1]