|
- import "android.text.method.DigitsKeyListener"
3 z( z- }2 P# L - import "android.graphics.Color"3 v) x& `( U3 g9 K; f
- import "android.graphics.Shader$TileMode"
/ m+ b( D& A% L1 S( ?' f) r7 \( o - import "android.graphics.*"
+ n9 H; U5 s2 o$ T - import "android.graphics.drawable.shapes.*"
, A* I5 w; `4 q: }2 @4 O - import "android.graphics.drawable.*"
, n7 c% b8 ~1 m* s1 K6 w3 X' K8 X - import "android.graphics.Paint$Cap"
" a' K% x9 j5 k' c - % J" C+ W) K# v- @6 |+ D4 H
- function rgb2hsv(color,hsv)# @6 q8 u) Q2 {
- $hsv0=hsv7 D) z0 N" Y1 D' A B# T4 A
- if not hsv
9 i7 X3 f5 P" i7 v7 b J. p - hsv=float[3]
% j; p1 ~! |1 v, D! ] - end
+ f: [7 N4 G+ I) r, V8 f9 C/ j* ~ - if type(color)=="string"
/ W4 p! L, B# A$ m5 i( o* a9 k# B - color=Color.parseColor(color)' j% N0 V' S& N( h
- end
3 W8 \+ J5 A' F2 I - Color.colorToHSV(color, hsv)
|) |9 [. I8 J1 X% E! q - if hsv0
7 {4 y: Z( A, L9 o - return hsv, U I. i1 K/ P. [
- else
- t. X4 X+ {' V+ H Q# h9 A - return luajava.astable(hsv)2 x! g& o ^ U1 K. R
- end, o* p: D# T3 N0 r+ R6 `- Z2 a) M
- end" a7 ^' ~/ c, B- V) b3 B$ J
- function hsv2rgb(hsv1,hsv2)
/ @( _' F; _& Y3 P9 u) y. A% @ n - local hsv,alpha5 N, E0 Z }1 t' E9 K: a
- if hsv22 A1 U$ d: I7 t& k$ G2 H
- alpha=hsv1' L( Q8 V) U1 p' n& G6 l5 W
- hsv=hsv2
. I$ r( F b5 i# |/ L - else
/ F" m2 c) E. _, b% w$ v$ W/ Z - alpha=255
- J# k3 \8 [0 I - hsv=hsv1
% e" B( C b' F- ^ - end
7 Y z+ t% V) Y$ @ o( h- k - hsv[1]=hsv[1]%360
i( J& v8 ?2 \2 |, ^! x6 E - if type(hsv)=="table"
3 T, M) r+ Q$ K& J! P* k2 J - hsv=float(hsv)
+ [+ K0 B5 l7 B0 g - end1 G( T0 ^' G* K# N0 I+ F. T# Y, I' ]
- $color=Color.HSVToColor(alpha,hsv)
) @, B g6 ~9 X* N7 @9 ?9 @5 c - return color
6 j* c" x# D0 I4 D9 O - end# i& `: i s8 N( p- j
- 9 W+ ]6 T! e5 [# Z: M5 q- N
- function HSV配色盘(color0,fun)+ {- v- @# O0 U! K
- if type(color0)=="number"+ z' A& k# y. m( [
- color0=string.format("%0x",color0)
# m& o9 p* i. ~5 Y7 v1 V- ?" D - end! z& L2 Z9 Q! x# Z" F M8 [) w
- HSV_dialog=AlertDialog.Builder(this)
/ X3 k) W$ M1 D5 b5 g6 P/ E - .setTitle("HSV配色盘")/ @% t8 T" y- z' u4 r
- if fun& Z5 Y- P1 ?* { K( R/ o1 S* Z
- HSV_dialog.setPositiveButton("确定",{onClick=lambda s:fun("#"..HSV_input.text,s)})
9 v# B5 I/ b4 K9 M* ] _% s - else2 b# w/ ]* R3 @, T. Y+ P
- HSV_dialog.setPositiveButton("复制",{onClick=function(v)0 v" Z C, x$ Z" Q0 o
- activity.getSystemService(Context.CLIPBOARD_SERVICE).setText("#"..HSV_input.text)+ k+ Q6 a/ ^- k, l$ Z
- Toast.makeText(activity, "复制成功",Toast.LENGTH_SHORT).show()3 J2 m8 u& d) r% T
- end})
3 d8 ]' W/ S! o! Q+ P - end* p5 g, S" E2 y, z- f; w9 V
- HSV_dialog.setNegativeButton("取消",nil)
( t* a0 s0 {( z1 W' v$ v - .setCancelable(false)
5 m. J# @: _2 _, R- C" w, E+ e - .setView(loadlayout{
1 s4 r& F. @4 z2 G* D9 v - LinearLayout;, S9 O: S# A0 m7 A! j; n: Y
- padding="10dp";
$ t* D6 j& h/ K6 _' N - orientation="vertical";
0 ]! F' m( M6 U' Y- i! G2 W+ [ - gravity="center";
3 Y4 t7 L! B) ]# F - {
9 s4 U& v& b: C2 c1 i; B - CardView;( X- s6 ]# X( G# f
- CardElevation="5dp";: b9 V2 |# A- h, ]1 X/ ~8 N2 V
- layout_width="80dp";: G0 m) R, j- E8 e" I8 {; J
- layout_height="80dp";3 u6 q4 D3 l/ L- F" L% g" @4 R
- backgroundColor=4294967295;
$ E& N" w- A0 O+ Q# v - layout_marginTop="8dp";
! ~( T C9 u6 a$ t5 _5 G6 ] - radius="40dp";
; p- N0 C9 r( V0 }6 M8 C - id="HSV_card";
' X8 t+ Y1 h8 T3 j1 j. W - };2 b8 V0 X! h; }' n& Y0 p
- {8 f2 D% m8 s" K0 ^
- LinearLayout;# M) Q; d$ A( @4 W' \
- gravity="center";
3 q0 m% w) {8 {: z - layout_width="fill";
( t' y* x: \+ y8 f8 ^: Q - padding="5dp";7 V6 g% q2 n7 H
- {8 e. R2 E. C1 r/ T
- TextView;8 Z( s0 V9 l9 q
- textSize="18dp";
6 o) D; N8 p+ B8 c( D& F* O - text="#";
" `7 p( B8 O- q6 W2 ~( Q- h* ` - backgroundColor=0;
* ^5 B' V8 Y5 k" \+ W& u - textColor=0xff000000;' P( ?) G" M) q {2 H, i+ w
- };
8 O* a+ t0 A6 D - {+ {# B( R/ {: A( ?$ e& e: N9 k H
- EditText;2 J# a! N* L9 {+ [' b
- id="HSV_input";
4 y8 h' E. d1 V3 {4 J - singleLine=true;
. ? B+ _, I" ~2 t; o) }( G - padding=0;" f' [& `8 F, s5 \, k+ f) {
- backgroundColor=0;
4 h& M! }' |: w: V# f4 ` - hint="FFFFFF";* s- e. Y. z; S- S/ {3 u
- textSize="18dp";
" C' B+ l' E8 v! |" q - keyListener=DigitsKeyListener.getInstance("1234567890abcdefABCDEF")% ]( K$ }, b6 ?: Q
- };
+ c# X$ h x" V0 e4 J% R2 Y - };
4 ?* H9 Y6 A8 F* m - {1 W9 l ^% X& b4 Q I' e- E: S
- SeekBar;/ e7 S1 F% X' s5 O/ @0 _
- id="拖动H";. V7 B3 j* C! ?5 w( `4 I9 x
- layout_width="280dp";. h7 L S4 t& n* `2 M
- Max=360*2;
' S8 I" O4 u8 S" T9 p' p! I4 V" n - layout_margin="5dp";
, Y: \' E) {( k6 @ - };' z0 n9 i; Y" I/ v/ R
- {5 S. n! m7 _0 k' N
- SeekBar;3 s7 u m! Q! d" {' `- Q% L' d2 O
- id="拖动S";
! f2 _: e7 h3 y, M - layout_width="280dp";
0 h* ^. _# Z3 S0 H - layout_margin="5dp";' ~+ I- m+ g+ e h Q
- Max=255;
% C5 P, ?3 I; v& \7 B5 h! r0 D - };
+ U1 S# m: N6 h% d: }3 Z, [ - {9 _; r0 R; q0 p" ?/ d- p! S# x- H5 I
- SeekBar;
" `- X$ C$ |5 F- T; x8 }3 L - id="拖动V";( W9 L6 M% _( h1 X
- layout_width="280dp";6 h6 ]. \. E) L5 m- e- R
- layout_margin="5dp";
. [7 v$ m& E8 D* P - Max=255
+ `7 b z5 Z# R% E - };
, t& ^, h6 R5 s; x7 A - {
+ Y2 H6 t& _, b) r$ S6 ~% x# V - TextView;
/ _. s0 t3 h7 H W' C, j - id="HSV_value";7 G4 I5 t( N* ~1 T: x# L: n
- gravity="center";
3 S& s$ T- V k+ ]9 v/ g9 O - layout_width="fill";. \2 h9 i+ ^+ i* [; o' F
- padding="5dp";
. Z0 P3 Y, ?' [' e2 d: Y; x - text="H:360.0 S:255 V:255";
* Z; v& Q' |5 A4 T2 [2 h' C - };
6 a( z$ C4 b( k1 j5 h K - }5 D2 D# F1 B. Q6 `0 T, W2 q
$ ^! O2 g" h7 K4 u; Y- ); a7 \: r$ O. b6 d. Q
- .show()
- {& f: X. P. b! `; V" ?; N
1 Z& }+ F( C2 J" ~6 z- |- local H,S,V=0,0,13 \& S7 R% K& ^2 [/ Q
- HSV_input.addTextChangedListener{
) p2 |* ?0 O. h& Z - onTextChanged=function(s), q R1 ~) h$ e% ]0 r. c: P
- $s=tostring(s)! G+ U9 Y$ Z. R1 I* P w
- if #s==65 m; ~. A" D2 S. Z: f
- $n=tonumber("0xff"..s)% U3 O" L9 Q0 I& I
- if HSV_lock" g! d# X( U8 o
- HSV_lock=nil' {3 @ a8 q5 T* I) F
- else7 K! d% K$ \+ j6 _4 b- R3 m3 c* ?1 U8 U
- HSV_lock1=1# `4 K2 R+ A: n }
- $hsv=rgb2hsv(n)0 G( S. v K, ?: l2 j9 j
- 拖动H.Progress=tointeger(hsv[1]*2)4 N1 U, b# f. U/ K# I5 O
- 拖动S.Progress=tointeger(hsv[2]*255)* R3 J* a$ t0 ~8 c4 t: e4 D
- 拖动V.Progress=tointeger(hsv[3]*255)
( _* g6 U: B- m' q2 i - H,S,V= hsv[1],hsv[2],hsv[3]8 C* y* i% b2 v! x s. c) W
- 刷新S()8 B4 p6 B0 o! e, N: |$ M
- 刷新V()* @& B6 t/ `4 t1 D7 e- l6 X2 Y6 n
- end! a/ J( T5 h2 r( S1 r* e3 W
- HSV_card.backgroundColor=n
( J0 T3 H2 D% i# _ - HSV_value.text="H:"..(tointeger(H*10)/10).." S:"..tointeger(S*255).." V:"..tointeger(V*255)
+ z3 y2 O. i& u; }2 ^' V" H - elseif #s>6# P X/ w$ a7 U( P
- HSV_lock1=1
! K' H2 S: [* X2 j! r6 z - HSV_lock=nil' R' i& U+ R# v. C$ o2 ?, X% d
- HSV_input.text=s:sub(-6,-1)
1 ?: s* c. m0 t* M+ s3 H4 d3 U - end
6 F- r5 V8 ^! L8 M5 ? - end. h8 O: z6 t, t6 h$ \/ r
- }
% t) m" m) {* [0 {- f* Q - 拖动H.post(function()5 A1 W' j6 }3 s3 H& @: _2 b
- local w,h,tab,hsv,hk,hkdx=拖动H.width,拖动H.height,{},{0,1,1},{},拖动H.Thumb7 g; s; p2 ~ {; @1 ?
- for i=0,360*2
! F! `+ n* D7 \1 t - hsv[1]=i/2/ X) k# `8 {9 k0 J8 L4 S
- tab[i]=hsv2rgb(hsv): ? t7 a1 T) H! i9 a q
- hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)
* c5 Y& ?% I3 w3 U - end
+ @0 ?! Q' @( J) o3 d3 V+ C H( }& ?7 ]' d4 B - 9 G5 ^' B5 X" q# x( ?, ]' d
- $draw=LuaDrawable(function(c,p,s)
( d, t( L: u4 u v - local w,h,pos=c.width,c.height,拖动H.Progress
9 A# x ^) P. i* D6 _5 J8 n' [ - c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)" h+ J2 z" B& f4 h: I! @* e
- hkdx.setColorFilter(hk[pos])
- n" l" n! @& t# { - end)
- d1 m' x* E6 r/ _6 p - 拖动H.setProgressDrawable(draw);" O1 ?( d& X, C z
- ) e1 B0 o* ?2 i: w
- draw.paint
! l% G/ k& S/ d5 b* e - .setDither(true)$ y3 b0 A3 P3 Y2 i
- .setAntiAlias(true)! d2 S/ }, V! x1 ]; L
- .setStrokeCap(Cap.ROUND)% E! ]5 ~3 u$ f; ]! z/ w
- .setStrokeWidth(拖动H.height/8)
" I1 j0 h6 i1 n( H, h, D6 a - .setShadowLayer(8,0,0,0xff000000)
" C+ j( j8 ~/ |0 `0 D$ s - .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
- k. \% v$ z) c5 U
) y/ n- }+ \) y) M8 f2 R2 E9 U- 拖动H.setOnSeekBarChangeListener{/ }2 \& Y6 E2 Q) ]/ `( J
- onProgressChanged=function()
2 \7 }5 d6 ^5 I - H=拖动H.Progress/21 x! @* q. T6 P' o7 W) ], A% Q* Q
- if HSV_lock1) P1 R+ K# ~# ?: f& f" a
- HSV_lock1=nil
; x$ k8 R& B. @3 {" V# A5 G% R! [ - else! E5 W2 P$ I! S" `! f W) y
- HSV_lock=1
' a' s( i& ]+ l9 J5 l - HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()
; t/ B/ v7 u/ }( o5 ^ - end0 g1 M8 u. j7 I# Q. B# V
- end,
1 ?. j/ q2 y; T( G6 [* {2 g - onStopTrackingTouch=function()
: H0 k! {: [" Z; r J - 刷新S()1 ?% K& }' t/ ~* r
- 刷新V()
( M2 r6 L, [( e/ b4 l% y4 Y% r - end,0 `: S: d6 l& i2 b$ h7 K1 q
- }) D/ {! g8 @2 V' ?+ }' N. B" z7 N
- end)
l% G4 H- g- G! b - 1 }" f9 p3 K1 J1 z$ D
- ^2 q# E" y/ e* q5 u0 H7 |* ]- function 刷新S()$ L5 |- n3 S& Y t
- 拖动S.post(function()
; y/ u3 g6 t e, T J. D, B - $hkdx=拖动S.Thumb
0 ^/ B: n8 f/ g+ ]* v9 [9 F - local w,h,tab,hsv,hk=拖动S.width,拖动S.height,{},{H,1,1},{}' N, x& p! g" `
; ~' H2 ^: v! W% [; G- for i=0,255- ~1 ~7 S! G3 M s |
- hsv[2]=i*(1/255)
- c+ A: Y& ~4 D% m, ` - tab[i]=hsv2rgb(hsv)
* L/ W( N- }4 c$ D6 A9 p# ^% Q - hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)
. G1 l5 A1 L; ?2 J - end, r" I. {$ e/ {" H
, D; V! @0 [; ^- $draw=LuaDrawable(function(c,p,s)
& K" ~6 \" v& \- q6 P! T1 {/ x - local w,h,pos=c.width,c.height,拖动S.Progress5 J% E0 W+ x- o6 r9 _
- c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)
: v0 I: y, z3 m8 z- D* m - hkdx.setColorFilter(hk[pos])- n ?: a/ S! a+ P8 h4 y
- end)! j- T; Z) y( y1 O
- 拖动S.setProgressDrawable(draw);
& D! e1 s/ Y4 t5 }
S2 `# w# A4 [6 D# F( n2 i- draw.paint( W+ k: ~) Z- b% {
- .setDither(true): i8 T1 t. m) {
- .setAntiAlias(true)) J2 {3 g! U$ J/ b# |& n+ R# |
- .setStrokeCap(Cap.ROUND)
; k8 i3 J Q; f( [6 @% {. V - .setStrokeWidth(拖动S.height/8)9 P1 K$ E: O- u# N7 \3 u' w- t
- .setShadowLayer(8,0,0,0xff000000)
7 {$ d3 j3 S* H2 J3 ] - .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR)). T% V- r8 J! a3 C% P
" Q4 }" i2 T- F+ p# t$ \7 }- 拖动S.setOnSeekBarChangeListener{
s$ @. N: P3 G% S3 n - onProgressChanged=function()( M$ N5 S2 \% p
- S=拖动S.Progress*(1/255)0 v4 M& U$ \ S/ {& O5 m0 o
- if HSV_lock1
. n& E$ V( Z. r+ Q, ` - HSV_lock1=nil' e. z" h7 h3 C- Q$ B# t) m2 I! ^
- else& h3 [2 s5 ?/ O, t7 n
- HSV_lock=1$ K; O4 }$ U0 S& [
- HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()5 J/ z+ a: |0 i# h9 \( h
- end2 ]- ]4 B& k: ^& F- g- E
- end} B5 ^8 S* k' M6 q% f4 ~
- end); s4 v* h* i( e9 i
- end/ \4 d% J9 C3 B) M7 h$ U
- -- 刷新S()
3 [5 M2 D, L. L' S7 x1 H2 p
6 U9 R- E4 g1 W- function 刷新V()5 n7 G8 g4 \- e" l0 h+ P! x
- 拖动V.post(function()/ } }5 k1 f+ s, i0 ~' ]8 E4 C
- $hkdx=拖动V.Thumb+ c$ _: J$ q Y. j
- local w,h,tab,hsv,hk=拖动V.width,拖动V.height,{},{H,1,1},{}
2 g/ H& j2 V4 \6 z" Q3 R - / j ?* f( z0 x. j1 \
- for i=0,255
# W2 {3 H7 @" `) }2 ^7 a1 S - hsv[3]=i*(1/255)
8 b1 p ^8 Y2 ~ X/ z0 k/ r: f - tab[i]=hsv2rgb(hsv)$ K9 w/ A5 I4 F( k6 }! E5 B7 f' p
- hk[i]=PorterDuffColorFilter(tab[i],PorterDuff.Mode.SRC_ATOP)# M" ?( o+ ^8 G, o
- end
$ X; z3 O- V4 g, D3 w
I2 R: a/ Y+ H4 a- $draw=LuaDrawable(function(c,p,s)1 y8 D- b# ^9 x- z
- local w,h,pos=c.width,c.height,拖动V.Progress; @" A. `8 J/ d1 G
- c.drawLine(0,h/2,w-(h*2)+(h/6),h/2,p)0 v, w1 |' J5 a8 N
- hkdx.setColorFilter(hk[pos]); R t$ D* q" @# i& k
- end)
* U C) Q) P- |0 l( x5 v - 拖动V.setProgressDrawable(draw);# h; N$ ]+ @( j! [9 ]. @
- 2 K( ]7 x; U, s2 M0 R: w$ z
- draw.paint
' C$ m2 f r" Y" K: E( b- z! u2 D0 O - .setDither(true)4 }. f( D- F3 n: W4 c& G" e
- .setAntiAlias(true)* r6 c8 x; K/ H* G. u$ Q/ v
- .setStrokeCap(Cap.ROUND)* p K5 W i) T0 m: g, V+ E
- .setStrokeWidth(拖动V.height/8)( U0 k R4 N) q) a
- .setShadowLayer(8,0,0,0xff000000)' v1 K9 Z$ s/ i1 A+ w" X
- .setShader(LinearGradient(0,h/2,w-(h*2)+(h/6),h/2,tab,nil,Shader.TileMode.MIRROR))
/ Y9 V, E9 J7 S/ u% p, c
$ J% U- q2 b) w' R, i+ g# i- 拖动V.setOnSeekBarChangeListener{
! U" G- m! n* [- z" w - onProgressChanged=function()! |/ F# e% k3 |8 X) N5 f
- V=拖动V.Progress*(1/255)9 T! E1 J1 f" W# ^6 S9 M0 `3 R1 B
- if HSV_lock1- I* @! I. o4 Z' {+ V/ A. D7 P
- HSV_lock1=nil
. _% k) v/ ]2 F$ p/ G+ L* h - else |7 \& K _! u
- HSV_lock=1
; G) C' i& C% n( m j2 {( E8 F4 M - HSV_input.text=string.format("%0x",hsv2rgb({H,S,V})):sub(-6,-1):upper()) D& w8 W8 O5 a# d8 J, G" [
- end" K* Q! T; x) \1 A
- end}
1 {9 g A; X7 j v) o' o - end)- \: l% n+ Y. V5 Z& H2 X$ u! |
- end
' @& H$ q' W5 K - -- 刷新V()
& k2 r2 C; T/ s
/ ^, ]' |3 }1 V/ {3 ]( Q. c- HSV_input.text=(color0 or "FFFFFF"):upper():sub(-6,-1)5 T" K- j9 b7 \; F! k4 n) s, O
- end+ h9 z+ z$ d3 [# K) M+ J+ F
- h+ Y6 A- q3 w
* t+ m. J/ G9 d
* N2 {$ M: E; j0 f. [
- Q- N$ d; ~5 c) V: a( a0 g2 B- , l% E* ~% {( v. l' G9 u5 z3 @, J
+ K3 k% z( g/ O z5 l8 W2 o- ' ~: T" M6 f& O2 U7 y2 T, M
- activity.setTheme(android.R.style.Theme_Material_Light_DarkActionBar)
. A% @3 E8 k7 w$ n. o0 W0 |
9 }9 k, ?0 m5 ] x- --HSV配色盘()--弹出配色盘,默认白色,点击复制3 u" A. a' @- a1 g6 K# |1 A- f
- --HSV配色盘("#00ff00")--弹出对话框,颜色代码,默认点击复制- _- i4 @# ]7 Q8 c+ j
- HSV配色盘(0xFFA774FF,function(颜色,对话框)--弹出对话框,颜色代码,设置点击事件
2 W6 R$ v; [# z% U6 ~( T - print("你选择了",颜色,"颜色")
" ]4 s# p8 m% V# [! W - end)
复制代码 |
|