|
- import "android.text.method.DigitsKeyListener": N& g8 w B, \3 N: W
- import "android.graphics.Color"
' X/ O0 k' W+ K c& c - import "android.graphics.Shader$TileMode"+ O% W% m( e- w8 F1 B
- import "android.graphics.*"& @! y5 _! c" p& M0 S* e
- import "android.graphics.drawable.shapes.*"4 r0 w! ~2 S% P0 K+ o
- import "android.graphics.drawable.*"" n0 E1 V7 b0 C6 |& t! R
- import "android.graphics.Paint$Cap": O- F) M- I* `0 F+ J
- " k: p: s* h) z# g3 ~
- function rgb2hsv(color,hsv)
* I* B* F, x7 R. I n" n; `8 W - $hsv0=hsv+ t0 O6 z4 q$ y* B% }! I! P
- if not hsv7 C; b* k* `; o4 {
- hsv=float[3]
3 H9 q! B3 v6 C. M - end& i* S( |4 @6 C+ K
- if type(color)=="string"- w* U5 h" e ~% f- Q- e
- color=Color.parseColor(color)
7 b# A- B; H6 g - end
; L1 }$ ~" H9 e0 f6 j8 P7 f - Color.colorToHSV(color, hsv)
' e8 S' q3 M) E3 h/ Z - if hsv0. H, G. U) m' q3 i0 p) X1 s$ A2 a% e
- return hsv
% N( @" O; [' ]- }1 D - else! l6 G3 _+ z/ q; X9 O. N
- return luajava.astable(hsv)" d% I# k; e% E! ]
- end4 d2 C0 }" I! ^; ~2 `
- end1 K5 k0 P6 ~' Q. y0 f2 _3 k; k. r. _
- function hsv2rgb(hsv1,hsv2)
* v: n1 ?% H- w- k - local hsv,alpha
/ [6 t( k+ l& [: o2 e# B - if hsv23 c" s" U" O& x7 ~! \! b: N" p1 S
- alpha=hsv1/ L, Q+ I! F( R9 a) v6 U" l
- hsv=hsv2
* m. s: ~% [" T* ~ - else! ]5 t% M L2 h9 [
- alpha=255
0 X' @' r: c2 ?7 s! | - hsv=hsv1& r/ A/ S& p2 y4 C
- end, A+ \0 S1 ~ q4 h/ F
- hsv[1]=hsv[1]%360
5 I+ t3 m* F# U$ y - if type(hsv)=="table"' f# ?9 _1 N3 Z6 s# |
- hsv=float(hsv)3 J2 y- I5 m6 R0 j) q; X) }: E
- end
0 s6 J6 A+ Y6 G6 J - $color=Color.HSVToColor(alpha,hsv)
" M( F( P. q4 k: I5 L/ T - return color; w2 D: A9 B. G3 i$ M
- end
0 H- _3 t/ X- z. J, E' g( M: ]
1 u5 x5 L- q. A; r- function HSV配色盘(color0,fun)+ J5 |( g- s u/ w9 v5 {
- if type(color0)=="number". ?) K0 E0 Z( @6 S+ ~9 ^' S) n4 I( m
- color0=string.format("%0x",color0)
6 M" W2 @; C7 I$ C% H+ P - end- P+ k. p) s5 B0 J+ b, R; v. Z, ^
- HSV_dialog=AlertDialog.Builder(this)
: I1 N! [, t2 c. S4 x: [ - .setTitle("HSV配色盘")& X3 ~/ o2 `1 W( K9 J
- if fun
" f1 `4 |( Y0 Q# A - HSV_dialog.setPositiveButton("确定",{onClick=lambda s:fun("#"..HSV_input.text,s)})
. ~) }2 n* v+ N' j4 D - else% `1 g! \% G5 [2 `- n9 g
- HSV_dialog.setPositiveButton("复制",{onClick=function(v) I# N t3 B' x& k# O
- activity.getSystemService(Context.CLIPBOARD_SERVICE).setText("#"..HSV_input.text)2 a7 m; k/ _8 \* D; Q
- Toast.makeText(activity, "复制成功",Toast.LENGTH_SHORT).show(). } F0 B9 T9 {7 W, g6 ~
- end})
6 z/ U) W# k7 ?3 E - end6 E& S" r8 A) E' w8 h4 M
- HSV_dialog.setNegativeButton("取消",nil), x3 B% U1 L- G% E1 S* q2 j
- .setCancelable(false)
8 e1 g/ S L' m, C4 M+ q - .setView(loadlayout{
1 G4 |( Q2 N2 C' [* | - LinearLayout;
! C9 \; h' w: K" _/ k& r# ]/ ^ - padding="10dp";. T, L8 |7 O: J' _) r+ T$ r# ]
- orientation="vertical";! u, x2 o, [, v; Z; G4 R
- gravity="center";
) t* `- I7 m) e6 Q - {% A/ ]! ]# v {* H! J
- CardView;. r2 B0 O4 d- t8 {, P% q. q3 l
- CardElevation="5dp"; H: o2 w8 D, f( m& P& J9 z6 n
- layout_width="80dp";
: p% @2 d. f% a# A: N% [5 _ - layout_height="80dp";
! S- D J* g( Q$ K6 Z3 A( ] - backgroundColor=4294967295;
4 P1 y: I s/ O0 T - layout_marginTop="8dp";9 o, m% T( v. |8 i: i
- radius="40dp";
( L9 z6 v4 x+ e: g- Y4 T - id="HSV_card";6 R( W% c, I( K, q; M) M
- };
( K* A4 ]6 J2 o0 E; W. x1 }2 X. U - {
% [* z5 L1 G- j- _! B - LinearLayout;4 q( b- @3 I# t1 Y2 U8 Z. Z
- gravity="center";; Z5 B& w, A" ~ }+ H2 e/ Q
- layout_width="fill";3 t, R/ b+ g/ a5 I
- padding="5dp";
. g; R N( w1 w/ a- y6 A# ~0 y - {0 z0 U3 l; T2 ?( i9 z1 c& `0 i
- TextView;
s9 M$ \5 G6 I$ T0 \+ | - textSize="18dp";4 V) y# @, I* c2 J2 q# i1 L
- text="#";+ \$ M* t& m' B
- backgroundColor=0;) g, T% \- ~. D2 s, [- a
- textColor=0xff000000;
& Z0 Y. T) ?8 r' ]3 s - };( \2 l4 c! u+ ~8 ]
- {! O( T! \4 T! m" b
- EditText;- Z7 ~; y+ @5 F9 x
- id="HSV_input";
5 d o1 z$ e& [3 b+ `5 J - singleLine=true;. ?5 V9 }1 q3 Y& y( N; Y4 q
- padding=0;2 s4 \' S2 j& c' t9 l" {2 K6 |
- backgroundColor=0;
, u* O2 ]/ j. _0 J0 c - hint="FFFFFF";3 Y* K1 k+ N" _# k" B3 w% ?: ?, \ u
- textSize="18dp";, G2 ~+ F- m K, x; ]' u8 ^( F
- keyListener=DigitsKeyListener.getInstance("1234567890abcdefABCDEF")
" x ^% L5 Y% P V - };
/ j3 a. i, O# y$ Q - };
" X; _/ F5 ]8 t. s% }8 l2 l Q - {. a- G, E# b. U" q3 o* C. G
- SeekBar;
! g( D) y3 e; ?7 l% a' n - id="拖动H";! e: A) U) b6 U9 P n4 ^7 A; k
- layout_width="280dp";
9 D! f6 b( h1 w: @2 G - Max=360*2;
- D2 a$ D+ h, `/ c$ ]6 k1 ~- R1 \' ]; z - layout_margin="5dp";: j7 A/ U; {4 m$ k
- };0 |' }3 `/ E' h c0 B, J4 c
- {
/ _/ }4 O7 E7 P - SeekBar;/ F8 \" k" q1 q) D1 `" `
- id="拖动S";: Q' V. y* B7 y$ R ], U E
- layout_width="280dp";
$ x& S+ \$ g3 a' f2 g9 E, O - layout_margin="5dp";5 X6 u$ C9 X$ x J: S
- Max=255;4 v# u/ W& P) |9 c
- };! W& e1 r4 W Y
- {
: H5 \2 K! L7 t - SeekBar;9 H, D1 ~1 l. e/ y6 a. p
- id="拖动V";' H; d W$ C r$ j/ }' a+ Z
- layout_width="280dp";/ N1 G$ k1 K; n) j8 U) x
- layout_margin="5dp";
) E5 [) l6 p. ]. O) Z. E - Max=255
+ m/ B M* x, ]' S# l" G' G. D7 G) v - };
$ P2 U$ F& G- { - {
% w$ I/ R2 j; {# |+ Z! E - TextView;& t* r/ y- |0 v: X5 ]/ b) w
- id="HSV_value";0 ]4 B4 f; y$ k" @9 S
- gravity="center";2 I' v+ [ V. s; \ N2 u
- layout_width="fill";% Q8 q- y2 X- e4 c- u+ N
- padding="5dp";
2 U0 S0 M0 ]% y ?1 ] - text="H:360.0 S:255 V:255";/ D& R( l4 r7 M+ i9 E M/ k. q9 J1 s
- };* P- s: p6 v$ v+ s
- }0 g9 M. a6 y% ` D w
* H; S/ T4 V5 M- ), B& m* T' u( R" p
- .show()2 @% z# @6 L3 s/ Y e
! ~( e. V ]# \$ h: l7 r# n# @8 q- local H,S,V=0,0,1
' I: w/ y; G& T: | - HSV_input.addTextChangedListener{5 S' g7 A( D( k, f, Q M6 }
- onTextChanged=function(s)+ z4 a: U0 b/ \% b
- $s=tostring(s)
. h8 x3 I6 w; {. c - if #s==6( b1 A D6 F l% C
- $n=tonumber("0xff"..s)
2 t1 `$ G4 Y0 T( h5 X! H+ g! ? - if HSV_lock6 L y* X% s% [
- HSV_lock=nil e9 a) g! `* b4 B
- else. ~9 x$ ^7 P ?9 \+ u; T4 E; i
- HSV_lock1=17 E( k" h g' m" A- a7 T; l6 S; k
- $hsv=rgb2hsv(n)8 S, W) O5 L6 I( [5 T- V: T
- 拖动H.Progress=tointeger(hsv[1]*2)
! L! g! T; e; Y8 }! r: v# K% z* Y - 拖动S.Progress=tointeger(hsv[2]*255)9 N8 c" g2 W# U8 g3 B7 s M1 B. l
- 拖动V.Progress=tointeger(hsv[3]*255)+ s2 d3 }9 u: R
- H,S,V= hsv[1],hsv[2],hsv[3], P8 o0 r6 Y# s+ a# h+ v U8 Z
- 刷新S()# V \# j# }2 o% l7 s/ p W4 F
- 刷新V()
- r) F: f! |# g! K; O; c/ C! r" { - end2 L2 |3 ~; t* n. E+ c
- HSV_card.backgroundColor=n
2 u( t2 Q6 g/ @, {& A. H - HSV_value.text="H:"..(tointeger(H*10)/10).." S:"..tointeger(S*255).." V:"..tointeger(V*255)) j* p& T% g; }% C& c7 x
- elseif #s>68 t) F$ a+ ^+ U
- HSV_lock1=1
; y0 j; J+ Q% B m1 u - HSV_lock=nil
+ `- a( d6 Q4 n8 N - HSV_input.text=s:sub(-6,-1)2 g, }3 E" O }5 d% h" M, |6 X
- end& h+ n9 Z. h3 G2 P
- end$ m- N3 C1 Y7 z) X
- }- F B! e' t- \
- 拖动H.post(function()" e2 g( ~$ L; Q3 p, z6 _3 N
- local w,h,tab,hsv,hk,hkdx=拖动H.width,拖动H.height,{},{0,1,1},{},拖动H.Thumb# k; \9 ?. P- n8 w* |
- for i=0,360*24 Q7 p3 v `! T9 E) ]2 ~5 K
- hsv[1]=i/2- f" x7 b$ ?3 H& D# _
- tab[i]=hsv2rgb(hsv)
1 r& U$ C/ U7 F1 [" ~ - hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)
$ }( J: M9 K3 l2 n - end* K2 n+ v( Z5 Y/ Y. ~! h) l
- u# ^# _) v& L2 Q6 ?9 S. G. `. S2 e
- $draw=LuaDrawable(function(c,p,s)' K# {6 ~3 V, g D0 w3 e
- local w,h,pos=c.width,c.height,拖动H.Progress
* A% T7 m# L( l* m4 l - c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p). s" R- W2 f. P( S9 O0 D" \8 M' A1 t
- hkdx.setColorFilter(hk[pos])) A/ K6 s/ `( \+ M
- end)
1 T* q: @& M+ Z, C - 拖动H.setProgressDrawable(draw);
$ n# w* o- Y1 M
+ R; r% d/ |( Y( Q1 [6 l- draw.paint3 b; A. }# L7 U5 }- z0 Y( [
- .setDither(true)
8 W! w$ r& Y( W8 ?! f& R; i7 J5 N - .setAntiAlias(true)
6 K# d1 I! {! U C6 B - .setStrokeCap(Cap.ROUND)+ L/ C4 m* I) V! i! ]' }
- .setStrokeWidth(拖动H.height/8)
1 n5 ?9 A- w7 U, \: ~, r1 p" h! @ - .setShadowLayer(8,0,0,0xff000000)5 e7 [/ k. t2 h- C6 ~3 i
- .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
' m) p) L( n m - $ ?8 t' e1 w/ v% i
- 拖动H.setOnSeekBarChangeListener{
/ a( V7 w" s0 ?$ H: ^( U' l" |+ J - onProgressChanged=function()5 ?" X4 n r9 b
- H=拖动H.Progress/2
3 Y- Z% n5 B1 l+ y9 Z( y& x( ]8 z - if HSV_lock1
' d0 P) O+ l4 {# {" W - HSV_lock1=nil4 m* h8 u* j) f6 `3 `% \7 ~
- else) c% V" u7 u7 Z
- HSV_lock=17 ^ R. V# a, ]) I5 { d [: m
- HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
! k! L( m( B( ]- r - end
0 j: c% h3 ~ r" r+ {- F' \ - end,4 H6 K8 p B$ J! ~/ U) p
- onStopTrackingTouch=function(): j5 \ v; ~$ E6 U/ f/ d
- 刷新S()
1 J% ]* M: f% u) o! O5 {( u - 刷新V()' K# ^1 u" X$ H. p& x3 a0 a
- end,3 {- u8 [* k0 d2 Y$ w& C& t1 Z( s b
- }
) y4 n6 C8 e: X M+ L; d6 J; c - end)
% `5 k# ~ j3 y7 j I$ |9 e {0 h - % F b( `- m( q5 v6 J) o* k
- 9 v9 C8 R2 H* V
- function 刷新S()
! d1 o1 y: W0 |6 u - 拖动S.post(function()5 Z. S. O7 m( y- D( a
- $hkdx=拖动S.Thumb
4 x7 b, p/ }/ a' `+ v5 p - local w,h,tab,hsv,hk=拖动S.width,拖动S.height,{},{H,1,1},{}% n6 e8 @3 }! k
- 0 O: J1 c! i" C5 B$ S D: E
- for i=0,255
Q* c2 f# s5 h$ N( B* ] - hsv[2]=i*(1/255)
, W! c7 l4 s% x) L. c - tab[i]=hsv2rgb(hsv)
* Y, t, w+ ^- d0 `' v - hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)
g5 [4 w$ d& P7 y D0 R - end# [( a4 `, S; q! z
- # c0 \0 H% u; A5 [! `, _( W7 B
- $draw=LuaDrawable(function(c,p,s)5 Z" Q: K! ]% i# M. ]
- local w,h,pos=c.width,c.height,拖动S.Progress
t( x$ W7 @! D; n% i m4 b8 V, ? - c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
- E( ^# @ V- t - hkdx.setColorFilter(hk[pos])
. k% V2 E5 h+ Q% m `( ~ - end)
7 T3 u- ?1 A9 ^7 c. [5 m - 拖动S.setProgressDrawable(draw);
4 k! P4 x, } _( y) R3 C' ~) X
% K) y/ z7 H! B, ^- draw.paint
2 d& ^7 E( W( t0 j - .setDither(true)
8 {6 Q( ~; q9 ]4 E* m4 R - .setAntiAlias(true)7 S3 q" F( [" K0 Z. Y5 ]7 ]3 e
- .setStrokeCap(Cap.ROUND)
+ Q# P5 `& X {: r: Q1 K$ T - .setStrokeWidth(拖动S.height/8): `: c0 |' ?' ?. E) n, A
- .setShadowLayer(8,0,0,0xff000000)) N i5 Z0 n3 o
- .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))0 a4 N: X; p3 Y4 V8 E
: s$ x/ z6 y j- 拖动S.setOnSeekBarChangeListener{
& s" o% M# r! `! N5 Z7 q, v+ k - onProgressChanged=function()
2 U# A1 C* Y) `, g - S=拖动S.Progress*(1/255)
. |# f; v" l- d2 Q3 X+ q. R( o7 t( Q - if HSV_lock1
/ r# u+ @; v( `( s4 i: U - HSV_lock1=nil4 Z, C. _; \" J5 Y3 }9 a3 f0 D; P
- else
8 X! M) e: u- y- w; F1 l* ?8 v- A7 B w3 d - HSV_lock=18 L! B' K2 C9 N/ i: x8 d
- HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
, L8 d4 `) n( ^5 ] D' k% `3 Y - end- v8 c( s* T7 i+ j, S
- end}% z& |2 h: h, u1 J: m: f! P
- end)$ o! ]! R: p7 W0 x. [( w' y) l7 R
- end, R3 E+ z, G) e1 X; \
- -- 刷新S(), {8 \, a- R" S4 }) P' `1 t
- 0 w1 q6 z2 `: R7 N
- function 刷新V()
( t( J% Q( b( E" A% G* t3 y% E - 拖动V.post(function()6 z) x) @" f8 n* t
- $hkdx=拖动V.Thumb
7 o! p# `, N2 h' d7 M - local w,h,tab,hsv,hk=拖动V.width,拖动V.height,{},{H,1,1},{}
+ ^0 G) v" z# ]! d! S8 z* T) o
4 K3 N9 D3 q7 X3 Z+ w" c' G% @- for i=0,255
% U$ ]. b; E! c5 I - hsv[3]=i*(1/255)
0 y' C/ m% l4 Z* S - tab[i]=hsv2rgb(hsv)! Q; \1 x, H4 U& z% y( W
- hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)
+ ~! W0 l$ k) j; A - end3 J' t$ z$ Q! V; [4 W3 m
- 5 I. x* q F# y$ r0 E0 u8 d
- $draw=LuaDrawable(function(c,p,s)# K3 ]# e% ~- s0 J+ D
- local w,h,pos=c.width,c.height,拖动V.Progress5 h8 ~6 N3 D4 S8 W) f
- c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
+ G8 A1 }) d' A- w/ M4 b9 C5 F - hkdx.setColorFilter(hk[pos])' ?$ z1 \, C, p# Q9 m1 T
- end); p" [* j% q Z
- 拖动V.setProgressDrawable(draw);
& N s; _" {, w% N* d+ a' ~ - 8 k3 _7 _" p; H
- draw.paint9 Q1 C) e3 h2 m1 ^1 Q0 x' N
- .setDither(true)0 _: {( z9 \, W: D7 q' [
- .setAntiAlias(true)
- p* o4 } O1 B1 l. l6 W. \8 p - .setStrokeCap(Cap.ROUND)
. M6 I- {! L' A! v8 ? q& Z8 w - .setStrokeWidth(拖动V.height/8)
; }1 l x+ w [! r; H0 M/ K - .setShadowLayer(8,0,0,0xff000000)
: c8 j4 c: R! y, l g$ p( v: r - .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
" b8 L4 d* Q- I, y/ D - & @6 o+ Q6 d# w: I7 L# L! U5 O
- 拖动V.setOnSeekBarChangeListener{
1 N, k/ L+ ~' n3 y- }" |* q0 x' {$ B - onProgressChanged=function()
4 V4 \% k% ?6 m. V: n1 ? - V=拖动V.Progress*(1/255)
* O! {1 r4 {( `2 S! y - if HSV_lock1
7 i/ x f/ w! d9 ?1 V - HSV_lock1=nil1 R+ W& I5 e( p, }$ r+ A' @4 J1 a
- else) ^6 Q0 Q7 c w
- HSV_lock=1% r! b7 v" e$ D1 e) X
- HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()& a) |. z+ U3 {. H1 |8 P! v
- end. c$ L7 S \5 O2 x% g
- end}4 ^/ s& L( p6 b, r M
- end)& D5 o" w( Y6 F1 h3 w- d
- end% a! h) x) m! J
- -- 刷新V()
0 S V Z7 y$ K/ m3 _
/ T8 f ? D& A3 }' i- HSV_input.text=(color0 or "FFFFFF"):upper():sub(-6,-1)
/ z, s" S: e9 e - end6 R% [- R! p9 h# b
- E1 t2 v( j6 N5 F0 _" m
- 1 I' K0 V! K& }5 y, O
6 L5 L& k4 d# p! F( T- + e) Z8 ]3 ~: t2 W( D# y
# Q* w/ S) \; ]- * B$ M) y) g6 M. \ C
) f' U( f4 g. l8 X* S4 v, g- activity.setTheme(android.R.style.Theme_Material_Light_DarkActionBar)
" }! M I3 k# O' _, o! D9 g3 ]
) _% N9 ?! b$ Z7 z- --HSV配色盘()--弹出配色盘,默认白色,点击复制
- k" y P/ A6 Z. O6 B5 F - --HSV配色盘("#00ff00")--弹出对话框,颜色代码,默认点击复制
! q$ L7 E( o$ T - HSV配色盘(0xFFA774FF,function(颜色,对话框)--弹出对话框,颜色代码,设置点击事件0 t3 P+ s% m9 A7 s
- print("你选择了",颜色,"颜色")
( h- U/ m4 n- D* L - end)
复制代码 |
|