|
- require "import"* [5 o& C/ a, Q
- import "android.app.*"/ D# Z$ n- J6 x9 l
- import "android.os.*"
9 t$ U: V. x6 ?3 c4 I - import "android.widget.*"9 d, k/ X Y$ j& [7 C
- import "android.view.*"9 O% e: b" x/ R1 I
- layout={0 g5 z- e; T5 a, I2 J
- LinearLayout;
9 v8 s6 W: i2 d/ C - layout_width="fill";7 @1 T6 Q1 f( S3 b! \7 m& \. C9 y5 h
- layout_height="fill";: \6 o3 X9 x2 T. m6 s8 Y; s
- orientation="vertical";
/ B6 R# V& J' x - {2 s; D! T( w. K/ M4 d2 J
- LinearLayout;
1 l0 W' b) g; M# D/ s+ q& B - id="view";0 T+ |" ^* L$ o3 {) D. a
- layout_width="fill";
. P( o" S- `$ n I% A8 v2 S, f - layout_height="fill";
, ^4 X2 G2 p: f. n - orientation="vertical";
- i0 X9 I' D" a0 ]' m0 w7 M$ x0 p - }; B, u0 a( X# ?% ?( C! d4 H
- };
! z4 `/ d2 W1 i; q# S
; C" H* {6 C% J' i; L* C* I* O- activity.setTheme(android.R.style.Theme_Material_Light)1 `/ J7 O' F/ t B- l; F
- activity.setContentView(loadlayout(layout))
7 h& }* N' {; d. X. t7 ]
' ]; {8 U* r9 I- {8 e6 O, i' R- --activity.ActionBar.hide()6 k$ \, C0 d! C' i
- 3 g; c$ _! h: O/ i( z3 y G9 i
! w5 S. r/ {0 W" J) V- import "android.media.AudioManager"
, J \: y0 ?; d* z( K - import "android.media.SoundPool"
! \& ^ P. D9 \2 r9 Z9 j* h - local ogg = {"s_00.ogg","s_01.ogg","s_02.ogg","s_03.ogg","s_04.ogg","s_05.ogg",
! n) S; Y+ G/ L) Q r2 D* o - "s_06.ogg","s_07.ogg","s_08.ogg","s_09.ogg","s_10.ogg","s_11.ogg",4 H) z8 K. e* u2 K) d' ?! [
- "s_12.ogg","s_13.ogg","s_14.ogg","s_15.ogg","s_16.ogg","s_17.ogg",% I% N& e# {! g) k4 e
- "s_18.ogg","s_19.ogg","s_20.ogg","s_21.ogg","s_22.ogg","s_23.ogg",}
6 [. v, X! F7 e( |- M; C* f( u( c+ q
* X* t0 E% G7 f0 o- local soundPool = SoundPool(1,AudioManager.STREAM_MUSIC,0)/ G, [: H2 g1 g& Q! c9 q2 i8 c/ Y
- local object = Object[#ogg+1]
( \) `# ~! r) s' ~ - for i=1,#ogg do
0 U$ U" m1 c) P - object[i] = false! u9 a5 ] C# a/ V5 q
- soundPool.load(activity.getLuaDir("voidce".."/"..ogg[i]),0)
2 W: U5 M5 }/ h5 H( | - end$ F/ g- x' u- s, Y- O
- soundPool.setOnLoadCompleteListener(SoundPool.OnLoadCompleteListener{
/ _% R* q$ v' i& M) j" \! w8 D0 ] - onLoadComplete=function(s,i,b)1 ~$ c+ e$ {" E. E- I2 n
- object[i] = true
& Y; Q4 w5 G# x2 X6 M, I - end})
- {% C7 q# e- q* v" ~! Q7 ?7 ?8 E, I% J$ o
! R' ]: [# }! q- ^ r0 w2 E, t
" D; e( D! k5 @8 H$ B3 E& d( E- 2 @, G/ A! x, {& J7 K
- / J: v2 N2 U" v
- require "import"
' `6 l9 n p; Y
, W9 c/ t0 n/ Z8 g3 j& c" B. W- import "android.icu.text.SimpleDateFormat"
( b6 j- M6 N" R. Z - import "android.animation.ValueAnimator"
3 f" r0 F, h5 E - SunsetClock = {}
5 f( K: p! A5 Z. T - local activity = activity or service' m$ ]) ] B; l% B
- local color = 0xffff00000 H! n9 ^* d; ]; q
- local xcolor = 0xffffffff: ]" Q# g9 o3 {! p
- local drawcolor = 0xff000000
5 W8 ^& i3 z1 i2 {1 V5 D! j - local size = nil- z. o+ Y, [/ K; N8 ^/ a
- local width = nil --activity.getWidth()
# l3 D! E2 f2 D1 {, c - local height = nil --activity.getHeight()
) s$ X0 `1 h2 q% {3 X+ v) [ - local poortime = 0/ R8 J4 M* e8 ]: ?
- local Clock_h,Clock_m,Clock_s = 0,0,0
; b. G: T; A0 h7 g9 V- M0 G2 d2 D/ v - local invaliSelf = true. y- w y) J4 m' m
- local sd = SimpleDateFormat("yyyy-MM-dd")( v1 F A9 `( h8 ]" D( W7 C
- local sds = SimpleDateFormat("E") U# {! P# A4 c2 [+ F& {- Q
- local function getSimp(data)6 M+ s- r5 o: o
- local eer = "周日"# B4 ~5 `+ P2 j2 R% v. D& O
- if !pcall(function()
\3 t. ?, X6 k. d! c0 m - eer = sds.format(sd.parse(data))# j1 R7 A+ d6 p' x' w3 z o6 S; X
- end) then" `& E" {" Y' {) W. F* J
- eer = "周日"
1 z! Y$ {. u: e6 o/ G9 T2 { - end
3 z; r5 C8 o' _2 l8 H - switch(eer)
+ K+ _; w( u- T" ^& y7 Y - case "周一": r7 V8 m; I) ?6 G
- return 1,eer3 @( [5 U. Q, D6 X# A. A
- case "周二"4 A0 C' G6 }) u: a0 `1 t# {2 ^3 X
- return 2,eer- R" p% a6 [4 I# [; H# b j0 @
- case "周三"/ b* \9 l' R X0 y$ M) j
- return 3,eer) `' E! x4 g* V0 `0 v3 e0 U% [7 I
- case "周四"
2 B; o- K, D2 E2 q - return 4,eer' g& l8 y, r) [* Q
- case "周五"
& y3 D8 }1 B2 O3 v m" _. x - return 5,err
8 X6 j3 n/ y$ f3 A - case "周六"
$ H4 F8 G( B' t& n1 N# O - return 6,eer0 L& k7 L9 \: ~6 G- N# g+ |, h
- case "周日"2 N. x! U: {/ F" c
- return 7,eer
$ l+ I3 j3 Q9 v) i1 } - end
" y4 R/ B% S" N6 A# b% X! j5 c/ n3 @ - return 7,eer
! ?4 }$ k" }6 m3 X5 T1 } - end, Y+ j, [. ^7 C5 N# W, W1 [
/ b$ K- z6 D3 W* o3 N- local 月 = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"}# `3 ~. p7 A0 ]3 @: C+ D. t
0 \; C$ e+ k. L' v! T0 H9 d# v; L- local 日 = {"1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号", "11号", "12号", "13号", "14号", "15号", "16号", "17号", "18号", "19号", "20号", "21号", "22号", "23号", "24号", "25号", "26号", "27号", "28号", "29号", "30号", "31号"}
, ` ?5 ^" M; h' d. l; r7 b l
6 x7 [9 a& b6 u& u5 x+ H- r- local 周 = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}4 h7 s% Y: M: f* d
- : G5 B8 J- t( m. U9 m
- local 时 = {"00小时", "01小时", "02小时", "03小时", "04小时", "05小时", "06小时", "07小时", "08小时", "09小时", "10小时", "11小时", "12小时", "13小时", "14小时", "15小时", "16小时", "17小时", "18小时", "19小时", "20小时", "21小时", "22小时", "23小时"}0 q+ r' T c( B! @6 s5 [# V
- 0 l) h+ m$ z/ O7 Z9 A8 J
- local 分 = {"00分钟","01分钟", "02分钟", "03分钟", "04分钟", "05分钟", "06分钟", "07分钟", "08分钟", "09分钟", "10分钟",' ^. B7 x9 W$ {0 b& a5 N
- "11分钟", "12分钟", "13分钟", "14分钟", "15分钟", "16分钟", "17分钟", "18分钟", "19分钟", "20分钟",. ~( v# O, M5 r8 h. g% j
- "21分钟", "22分钟", "23分钟", "24分钟", "25分钟", "26分钟", "27分钟", "28分钟", "29分钟", "30分钟",7 D2 f, B% O- t2 w3 ~2 e
- "31分钟", "32分钟", "33分钟", "34分钟", "35分钟", "36分钟", "37分钟", "38分钟", "39分钟", "40分钟",
. U/ [- C4 @8 e) w; ` - "41分钟", "42分钟", "43分钟", "44分钟", "45分钟", "46分钟", "47分钟", "48分钟", "49分钟", "50分钟",) K0 `2 r: h% z) A0 a# N; ~9 G
- "51分钟", "52分钟", "53分钟", "54分钟", "55分钟", "56分钟", "57分钟", "58分钟", "59分钟", "60分钟"}# h4 G1 e# B$ b4 `
- ( H4 z0 C% O" b3 F- B* n% m O
- local 秒 = {"01秒", "02秒", "03秒", "04秒", "05秒", "06秒", "07秒", "08秒", "09秒", "10秒",
: Q5 m( B$ G* r! S' g - "11秒", "12秒", "13秒", "14秒", "15秒", "16秒", "17秒", "18秒", "19秒", "20秒",( |9 `* l0 {2 `# [5 l" P D
- "21秒", "22秒", "23秒", "24秒", "25秒", "26秒", "27秒", "28秒", "29秒", "30秒",
8 v! H$ D- }" R0 N5 u - "31秒", "32秒", "33秒", "34秒", "35秒", "36秒", "37秒", "38秒", "39秒", "40秒",8 K) N C% T9 i, ^4 ?
- "41秒", "42秒", "43秒", "44秒", "45秒", "46秒", "47秒", "48秒", "49秒", "50秒",' V" s) X2 q w4 Y
- "51秒", "52秒", "53秒", "54秒", "55秒", "56秒", "57秒", "58秒", "59秒", "60秒"}
6 w% c/ F/ D0 P% U! q8 F
+ U6 C( k9 S' @* Y- local simp,_simpc = getSimp(os.date("%Y-%m-%d")), Q5 \/ _+ I0 M# c
- local h,m,s,e,d,r,y = tonumber(os.date("%H")),tonumber(os.date("%M")),tonumber(os.date("%S")),simp,tonumber(os.date("%d")),tonumber(os.date("%m")),tonumber(os.date("%Y"))4 y$ l* H! ~/ ?' N" c
- local cs,cm,ch,ce,cd,cr,cy,simpc = (360/#秒)*s,(360/#分)*m,(360/#时)*h,(360/#周)*e,(360/#日)*d,(360/#月)*r,y,_simpc+ Q0 \3 y- v! ~, D; Y, V
- local cv1,cv2,cv3,cv4,cv5,cv6 = 0,0,0,0,0,0
! y$ s. N5 f. w+ A5 A6 ^8 L4 A - local ofInt0 = ValueAnimator.ofFloat({0,-90})--整个的动画! d. \" q8 U4 X4 P) K
- .addUpdateListener{& n8 N1 \- @4 m
- onAnimationUpdate=function(e)' }# N0 ]+ r! ]2 Z8 D
- local nve = e.getAnimatedValue()" [* g; M; n# y8 R" d4 |! s
- cv1,cv2,cv3,cv4,cv5,cv6 = nve,nve,nve,nve,nve,nve* R8 x" W; a) L8 {0 A5 w
- if _view~=nil and invaliSelf then9 v' W+ S6 _, E% m3 p: l
- _view.invalidate()
& o( l" ^8 [7 s- H8 S - end% O) i* `! ^4 R. W% \* }
- end) L. W' Y8 k; b: m
- }
' ], \: A, u; C7 ] - .setDuration(1000)
9 d1 n) l& x0 }5 \$ @
9 \5 ^! ^* }" v6 F( W/ U- local ofInt1 = ValueAnimator.ofFloat({0,360/#秒}). ?* X) D0 ]5 {. H2 I6 u
- .addUpdateListener{
" A) j; n3 a& D: }" k! `* w - onAnimationUpdate=function(e)8 R2 Z; a; }0 O9 r0 j; w
- local nve = e.getAnimatedValue()
. P. p- H1 o! K1 l W: c. r6 D - cv1 = nve+cs6 P {- S9 E% F
- if _view~=nil and invaliSelf then4 k1 s5 y7 e3 ?. ~( }
- _view.invalidate()+ G! g3 f3 i. j1 y$ H! l+ ^
- end
+ T* N; e; O1 @, w! p. U - end
6 ~+ ^, t" t+ c: R2 `9 l& y - }1 D! H3 m0 R. t* A. O
- .setDuration(300)6 h6 ]' c% D D2 z
- local ofInt2 = ValueAnimator.ofFloat({0,360/#分})% [( N" `% C; t+ Q/ H! r, d0 J' A: X" p) ?
- .addUpdateListener{
" E v: _, B9 ?7 J6 ^+ u - onAnimationUpdate=function(e)
/ d% y0 [/ U6 a! I) F! q - local nve = e.getAnimatedValue()$ B' P5 Q# b5 s8 ^
- cv2 = nve+cm
# |) f( f2 r& ` - if _view~=nil and invaliSelf then
( t# O8 l8 F% J9 D - _view.invalidate()5 P' ^, _- w1 q( H( u
- end
/ L6 O* M, @5 e/ K+ o$ o. R z - end& V8 S8 c, O% W
- }
/ W$ N6 P- s2 F - .setDuration(300)
4 O y! ~ L3 ]. T, @: n - local ofInt3 = ValueAnimator.ofFloat({0,360/#时})/ Y' R' f( L8 [4 X+ w% J7 i+ @% r
- .addUpdateListener{" @! i3 T0 N, B6 p
- onAnimationUpdate=function(e)
8 {9 K5 o( U8 ?, x& b0 q - local nve = e.getAnimatedValue()
! Y0 C$ T _* V% R2 h6 k" x: ? - cv3 = nve+ch& v. `1 x1 r5 _% R+ H: M
- if _view~=nil and invaliSelf then3 `/ P, l6 [3 C& S+ y
- _view.invalidate()
) L6 M, H+ ]3 M% ` M) a- | i2 Q - end
* N' I8 Y. J- v5 C6 C [! ` - end
0 u; V z5 m G/ \5 R1 L - }
. U* N- o* k6 A! }" m - .setDuration(300)
3 V N: ~ C( `! a6 h- T: j! b6 i - local ofInt4 = ValueAnimator.ofFloat({0,360/#周})
! Z3 x* z4 c' w) y, a - .addUpdateListener{2 t( F8 t! w5 G6 p6 x) ~
- onAnimationUpdate=function(ee)8 f+ g$ r2 G4 Q3 S- d3 j# K% [
- local nve = ee.getAnimatedValue()" g+ ~; D( j% X$ z- Y9 ^0 i
- cv4 = nve+ce-360/#周; c: R# T6 n' V% E# t' ^
- if _view~=nil and invaliSelf then
5 [: b1 Y0 A: a0 q7 t - _view.invalidate()
Y+ ~# s) u7 y- ~$ D7 N7 C- r) L8 } - end( r5 G" N4 [3 _
- end
6 J7 |6 x. f8 p, [: U8 L2 E - }
8 B) P$ N/ i. L! X - .setDuration(300)% F, E2 f, w9 v
- local ofInt5 = ValueAnimator.ofFloat({0,360/#日})
2 X6 q1 j' F8 ]2 h b5 Q - .addUpdateListener{
0 X& R7 c+ M5 \ h$ [ - onAnimationUpdate=function(e)! Z$ N, a$ D: Y( K
- local nve = e.getAnimatedValue(). `+ ]( _3 k: k6 k, l
- cv5 = nve+cd-360/#日
" w" c. F$ e) H }$ `* v/ W - if _view~=nil and invaliSelf then" b7 E# G* {, ~$ Y+ s# u; A
- _view.invalidate()3 w5 R: L( u G4 W# H _ I; e
- end- p; ?3 G0 V+ v) S g3 Z, ~$ b2 ~3 T
- end+ v9 f/ k' y- W, L
- }
! K( E7 P( q, w3 C - .setDuration(300)1 |0 P* B1 r- J
- local ofInt6 = ValueAnimator.ofFloat({0,360/#月})
, a- m$ r0 }+ ~2 x7 N n - .addUpdateListener{
. Z/ ?# j2 z. @- Z$ O0 P- L5 e - onAnimationUpdate=function(e). p- y% k3 l& L5 X% ?2 q
- local nve = e.getAnimatedValue()2 H% |8 n: u& H% [+ \- W' A' c
- cv6 = nve+cr-360/#月5 _4 S S* u# _5 [3 P l9 t
- if _view~=nil and invaliSelf then
% T8 Q' d) u$ I' j - _view.invalidate()9 G, |5 l+ W5 ^! S
- end6 H0 L, s! Q6 v: W+ z9 J8 l8 U7 Q( I
- end3 ], ~/ @ L; S4 M# D
- }0 q: y' u1 Y$ f0 A' B5 r. }. F* M
- .setDuration(300)% T( e) T+ ~) X ], c2 p
- function _updateAdd()" j8 M5 {; W. m1 s$ r3 y/ ]
- _cs,_cm,_ch,_ce,_cd,_cr,_cy = cs,cm,ch,ce,cd,cr,cy+ Y# f+ p( q D! |- g
- local simp,_simpc = getSimp(os.date("%Y-%m-%d"))
2 C5 }; z- s0 b5 B - local h,m,s,e,d,r,y = tonumber(os.date("%H")),tonumber(os.date("%M")),tonumber(os.date("%S")),simp,tonumber(os.date("%d")),tonumber(os.date("%m")),tonumber(os.date("%Y"))( Q+ D, b! E% {' u
- cs,cm,ch,ce,cd,cr,cy,simpc = (360/#秒)*s,(360/#分)*m,(360/#时)*h,(360/#周)*e,(360/#日)*d,(360/#月)*r,y,_simpc8 h8 l+ F4 C9 y1 T$ _- L3 z
- if ofInt1~=nil and cs~=_cs then5 E. e: S2 S& H7 k& r
- ofInt1.start()7 L5 f0 g ]7 s& n' v: C' }' N% ~9 u
- if m==59 and ((s==(60-poortime) or s>(60-poortime)) and _function0~=nil) then
. d7 q& f3 O! Q; \4 ? - if _function0~=nil then# Y/ S# Y4 {" r# {. H) u$ k
- _function0(s)& F/ j0 y! s. D4 @6 R i* H
- end
2 b/ h4 T& e+ F0 s( S+ _8 G - end" L w% r$ P! l
- if h==Clock_h and m==Clock_m and s==Clock_s-1 then$ a/ P; z0 Y8 C) n3 B9 T- C' L
- if _function2~=nil then
$ }+ L! ^6 [9 j; g' m1 n, W - _function2(h,m,s)9 j1 h: k f0 {2 L' o" K
- end
2 h! Z; j- e) |, ~/ J - end( T/ J6 J- w" x. a0 w
- end4 W4 ^4 j. \# t9 D8 l
- if ofInt2~=nil and cm~=_cm then
0 U8 k1 _3 x4 }/ s' M" q# ? - ofInt2.start()9 i% V+ w+ o- F& s8 i5 p( R9 a
- end3 B# ^: [% T' n2 Y- N' i
- if ofInt3~=nil and ch~=_ch then
8 l/ C; ~, M' A. Q- m; _0 n8 I - ofInt3.start()4 @! b. J# n; [: K: X; i
- if _function1~=nil then6 F9 X- z2 F0 D8 Y
- _function1(h)+ B# m" x* f0 H6 L$ a' ?( v9 e: b
- end
- G$ B) t; K3 L6 h- F) v0 c& c* w - end) ~; K0 z- g3 R9 h& A
- if ofInt4~=nil and ce~=_ce then
& N# L, _0 @0 C) O" M - ofInt4.start()9 X$ K; \+ D* l: f# A( l7 v
- end1 L. O2 B6 H! J: _8 s
- if ofInt5~=nil and cd~=_cd then
" _- D; B, k/ X6 K) M8 a - ofInt5.start()$ p5 @- b2 s( c) I0 M0 s
- end
9 h; S! }- P. N - if ofInt6~=nil and cr~=_cr then; H* n A7 @! k
- ofInt6.start()
3 S9 v$ Q. V% N9 V) y - end0 g, g, K' S! ^) H3 W2 c
- end
( s2 Z4 S. z* s2 z. {) F' n) l0 ~ - , _* ]1 ?" y- E5 R: \
- local luaRunnable = function()5 m5 {" w8 D2 p' |6 E6 U* J8 _
- local pca1,pca2 = pcall(function(): w* f# |6 Q( t% b
- _updateAdd()+ h2 |3 E/ p: @- W* U+ W9 _* B* X; s! J
- end)
+ S0 ]( u. g D. B- i2 O6 V - if !pca1 then9 o; _) m# b: D7 F$ A
- print("定时任务异常!"..pca2)
: X2 u+ h/ r2 q - end6 s3 {0 B" T! |
- end6 l5 ^4 K) n8 ^3 m9 f
0 T- { [8 z1 K- local scheduledExecutor10 = Ticker()
! t; B! h2 u7 j; s& K* Y. W, K( O( o - scheduledExecutor10.Period=250
$ {3 \2 g/ F( _3 e4 ^ - scheduledExecutor10.onTick=luaRunnable4 @7 V/ A" f' g9 D& h- Q
- local function updateAddOrSubtract(functio)) w- F0 ?- M- ]
- scheduledExecutor10.start()0 b+ b+ W+ F( U8 f* F3 G' X8 J$ ~
- end
& ^8 S% n1 X1 n+ S9 n I - local function pauseAddOrSubtract(boo)
6 h0 \* f. L( ?; Z4 p: a3 S - scheduledExecutor10.setEnabled(boo): G, a% x6 l6 J1 y: m. w1 d! k
- end
1 v/ x9 `" F5 v) r- y - local function stopAddOrSubtract()2 S% o X: ^3 m. f0 o4 V
- if scheduledExecutor10~=nil then
5 a, n B4 F: b: p8 m0 T4 \1 b5 V - scheduledExecutor10.stop()9 a+ g4 \. \+ W* ?+ Z! e
- scheduledExecutor10 = nil/ X3 i3 g4 U6 N i! g
- end
' N( [1 I, y9 }5 s% Z! u - end+ ?+ E. H3 A* f6 i% G x
- 5 i2 L- r" {& {- }; |) B
- function SunsetClock:getDrawable()+ k. x+ Y' M7 R1 m' ]/ M
- return LuaDrawable(function(c,p,d)! x9 w \/ C1 [
- local b = d.bounds
0 P4 D$ e* m; o! o5 ]% ^- H3 ~ - local w1 = b.right' E: \3 L5 W- v: t) J w( Q5 t8 b+ a
- local h1 = b.bottom
/ L: v, N% Z- C) p, X1 l! ^ - local w = width or w1- K7 i6 H' ~0 {9 k7 x# a A5 b. d
- local h = height or h1& P% K! _2 T, E* Q' ^ h
- if h<w then/ [4 F4 @3 ]; S4 ?
- w = h
6 _. O3 k+ ]+ k, g: Y - end
3 E/ y% P2 j. _ ], r' N - p.setColor(color)6 j# w. | S4 B$ J# J, O# d3 O
- p.setTextSize(size or h/66)2 q* I/ t+ K" t$ R% s
- c.drawColor(drawcolor)--背景
. E: y) ^4 _( m. w9 S# p" F ^ - p.setAntiAlias(true)
; ]: ]. g; t6 h1 y3 R$ m - p.setStrokeWidth(3)
0 }% ], c% ^3 U2 y+ a: E# r! y3 t - p.setStyle(p.Style.FILL)- S" m9 L% O1 N0 D/ u1 E! e
3 }. Y! A7 i! U- C5 p2 b7 d- ---画秒钟$ H9 x) w! R+ f' G r6 H( B
- local a1,z1,x1,y1 = (w/8),p.measureText(秒[#秒-1]),view.getX(),-(p.ascent() + p.descent())
- ^. ]: ^7 S% i, G) k - c.save()
8 v' d& G9 r. X( t1 z0 }' J - c.translate(y1+10,10)
5 L: S1 s& \! n3 y+ o+ e - c.save()! q( F* g6 \, Y, q
- c.rotate((cv1 or 0)%-360,0,h/2)
# @% S3 {' ~+ D! p - c.save()
9 x' A0 W" X6 w3 ~ - for i=#秒,1,-1 do! r3 h& @6 g$ X Q
- c.drawText(秒[i],(h/2)-z1,h/2+(y1/2),p)0 l* t* z! d- `0 k
- c.rotate(360/#秒,0,h/2)! {2 y, X( t% F, A/ E7 J' X
- end7 D8 p7 W. W! M$ t% K: e
- c.restore()
5 G5 n% n( |9 b9 s - c.restore() B4 ~0 V4 F4 H; T" a1 ?1 q
% F$ R0 R7 {% f( k& ^- ---画分钟
$ m5 I" M& r9 [; {# ]% [7 K - local z2 = p.measureText(分[#分-1])+a1
! a2 j: |5 c: f& H: w; z+ [# Z - c.save()7 w+ `1 F7 U( P/ j
- c.rotate((cv2 or 0)%-360,0,h/2)9 l2 q! E" I2 _5 M+ b
- c.save()
8 @6 N4 e2 G: }+ O' p4 d% |, v/ _ - for i=#分,1,-1 do5 r& V# j- g. K* W5 I
- c.drawText(分[i],(h/2)-z2,h/2+(y1/2),p)
( c+ c: M! G; V7 w' S8 k2 { - c.rotate(360/#分,0,h/2)
& d2 c' D; w# H2 t5 ?" I8 G/ p) n - end
$ C; Y8 F* O! V+ F7 Z - c.restore()# p, B5 [# Q) [- P) a/ t$ _" w7 B
- c.restore()
3 u% O }7 b4 L1 k1 g) t - ! y, ?: l1 N4 t- I6 w( C
- ---画小时+ T0 ~- _5 U4 Z4 T, |& Q) i; D7 E( O
- local z3 = p.measureText(时[#时-1])+a1*2) e+ r: W3 ?6 S/ k6 G
- c.save()# I% j9 U$ _' u" B: G# K
- c.rotate((cv3 or 0)%-360,0,h/2)
Y6 j) ]* H3 q8 L5 y - c.save()7 @& @. n& V* B5 y2 o
- for i=#时,1,-1 do2 _9 u+ ^" T; g$ Y- D% w
- c.drawText(时[i],(h/2)-z3,h/2+(y1/2),p)
( \: J) M0 @) A! F# F+ O - c.rotate(360/#时,0,h/2)! g, n5 ?. n; J3 a
- end% u% s# @* j, {$ n. `
- c.restore()
. `4 ]+ J5 e9 c: }- l) N ~6 v - c.restore()! l1 k2 v, W% }3 W
- % k& X7 N1 F! j h! j4 A
- ---画星期
5 M: A0 V3 c- c5 X - local z4 = p.measureText(周[#周-1])+a1*3! C2 t$ s" c9 `0 L
- c.save()
( T9 R! Y. R$ Y: J- |) ^ - c.rotate((cv4 or 0)%-360,0,h/2)
! k2 Y" b& [, T+ ^ - c.save()% C$ `! e4 d7 K( s" [
- for i=#周,1,-1 do( B7 T8 z& w8 S" P- x. E/ C2 M$ v
- c.drawText(周[i],(h/2)-z4,h/2+(y1/2),p)- Y3 n8 b1 t6 E. F
- c.rotate(360/#周,0,h/2)) ]* j4 o) D+ v& e4 n% m- S
- end2 D3 l ]$ o$ Z' b) k! |) v# m
- c.restore(), R, i( f D* O2 V* E- S) d* o
- c.restore()2 P5 Q( c6 I+ ^. f5 A$ f$ o
- 5 W8 X* N) v0 r! ^2 H) ~4 x" ~4 B! W
- ---画日期3 G* j) k" e$ y! ^
- local z5 = p.measureText(日[#日-1])+a1*4
+ C; q5 A6 L b8 a5 |5 T - c.save(): F4 P) r& @4 i$ q( x9 w4 q
- c.rotate((cv5 or 0)%-360,0,h/2). g7 O2 d5 m9 ^" k
- c.save()
9 y4 r7 ]" P. F4 N* V - for i=#日,1,-1 do
' ?( L M. }# D, {8 g - c.drawText(日[i],(h/2)-z5,h/2+(y1/2),p)7 A. V$ @- j- H" S
- c.rotate(360/#日,0,h/2)
( K! m( k- L2 N/ [ - end
; L3 M n% l% n# D" k! { - c.restore()" J+ Q( U8 Y+ j) J
- c.restore()) _: q, I0 f2 B
- & p2 A% m s b4 x0 \/ ~' B
- ---画月份
- M1 U; B% [: f% X& V1 o; g - local z6 = p.measureText(月[#月-1])+a1*5- D2 e2 j0 k! G
- c.save()2 j! J u5 |) B" E0 T
- c.rotate((cv6 or 0)%-360,0,h/2)
[( h4 H/ j z- m - c.save()/ k3 Z5 [+ m$ k6 K4 d; G3 G
- for i=#月,1,-1 do$ i5 C% }+ t$ p& \/ p
- c.drawText(月[i],(h/2)-z6,h/2+(y1/2),p)
- ?: [" ^; r( o0 a7 v, x! l0 {( r, o - c.rotate(360/#月,0,h/2), M4 i8 v- ?& ?5 C
- end8 V. _& `9 Q+ E
- c.restore()
# `' q% B; M, w: c - c.restore()
/ ]( @& S7 P7 a5 Z V
. Z f1 J' `" P: v- 6 }0 Y3 g7 D+ D8 @8 h& F
- ---画年份: |/ F; m* U' @* W9 _
- local yr = tostring(cy)
) S& t; |5 ~( \% s Q8 Z, x - local z7 = p.measureText(yr)+a1*6.5
/ B* N3 |3 `1 `& T% Y8 W - c.drawText(yr,(h/2)-z7,h/2+(y1/2),p)+ `( }, f" H5 }% V* d% K# T
* ?; K. J6 R/ K* q- p.setColor(xcolor)
$ S* B0 H' N2 e A
5 o( T7 N! ` R" p7 L% L! n2 `- ---画文字星期
: c: Q/ ^9 C2 J6 r* @: g2 l - p.setTextSize(size and size*2.08 or h/33)3 v1 W) b( d' f
- local _yr = tostring(simpc)3 _( C% k) p' I- k2 d% u/ ^
- local _z8 = p.measureText(yr)" ]! V8 F/ ]) @! D L& m Y
- local _c8 = -(p.ascent() + p.descent())5 U$ q. V9 h' q5 B0 g
- c.drawText(_yr,w-(_z8*2),_c8*3,p)" t% ~' _+ p, L8 m
4 O! H& Y: a1 z, @- ---选中框
0 B" H) x( M8 ~6 @) [5 a - p.setStyle(p.Style.STROKE)$ r% v$ h( y9 G1 R7 n
- --星期
! f0 s3 E- H$ q3 W$ j4 z - --c.drawRoundRect(w-(_z8*2)-10,_c8*1.5-10,w-(_z8),_c8*3+30,10,15,p)6 K9 }; ]4 C! D5 s+ Q; ?* q
- --时间( O" S; s1 l0 @' D& U* r: d
- c.drawRoundRect(-(y1-8)*2,(h/2)-y1-5,w-y1-15,(h/2)+y1+5,10,15,p)
7 K/ D9 u! e9 w* t, j7 {7 @; v; |( ]; W
! c/ k* {& s. n$ i7 {" W3 g- c.restore()0 V8 n; T2 \# K% T% |- c
( y) z; Y$ x- V4 F, i, a2 u. E* i3 F- 3 |# x) [6 I/ K: N, b2 R( }2 R
- end)
- E# c) V; q* A$ }/ y0 Z - end+ d+ ]8 K* h. n/ Z
- function SunsetClock:start()
( v6 j- B, |( E V- i7 c - if _view~=nil then A j- |& X' q; a9 G
- _cs,_cm,_ch,_ce,_cd,_cr,_cy = 0,0,0,0,0,0,02 g4 m4 _ E2 t/ G, g5 \
- ofInt0.start()--初始动画
2 u. H3 S+ T% V/ j - task(1500,function()---等待启动动画结束) }$ p5 l$ P6 Y6 o
- ofInt1.start()
( c+ w; v( O; h - ofInt2.start()
8 ~( E, k. Z/ Y. D6 w! G - ofInt3.start()
% w4 E" C, D3 K; y& M x' h - ofInt4.start()
: O0 {( T1 V9 X" l8 ~ ` - ofInt5.start()
) \$ O4 ?3 Z n, Q: c9 Y - ofInt6.start()( I2 `" T" q* [# k
- end)
/ y( H" y, D7 d% X1 ] - updateAddOrSubtract(); j V- l \; I' c5 j+ n. [& {' W7 c
- end4 w. F5 T$ b0 G0 w
- end
$ i8 d- I; m: Q) N @; V$ Y - function SunsetClock:setEnabled(boo)
3 M4 ~8 ?' q) j* _ - pauseAddOrSubtract(boo)$ a# f8 K7 o# M3 q8 c% E
- _cs,_cm,_ch,_ce,_cd,_cr,_cy = 0,0,0,0,0,0,0# }0 t6 v7 E6 H. ]3 I X
- if boo then
- l8 t0 u p2 g/ l - ofInt1.start()
, P- L+ c$ s- ^ - ofInt2.start(): D3 P9 P' }( \2 s6 U( I& Y, ?
- ofInt3.start()
/ G% f. C8 {8 [9 a- \ - ofInt4.start()+ W) T8 G( U: ^) v
- ofInt5.start()
4 o3 k( M2 q7 H3 Z - ofInt6.start()7 w' H1 q2 @9 y! J- o- v- q
- end
; E; g D8 O( e - end
" ]0 W( ^" ^& E# d3 [( J! X8 X' N7 X - function SunsetClock:stop()/ J$ Y; a; [: K9 B' l6 X0 T8 Q N
- stopAddOrSubtract()
: J+ I- ]1 p7 Z - end
4 u4 c; n/ v) v/ x! | - function SunsetClock:new(view)# k3 m/ P$ d% ]( ]
- if view~=nil then4 f$ d- T6 I4 }$ V9 R% ?$ Q. j
- _view = view
& A/ n$ i9 i6 M6 P. Z3 ?1 ? - else
0 p& o- p+ b4 F6 L* n* u. t( L9 ]7 ^ - error("\n\nview不能为空\n\n")
5 a0 ?9 \ r5 ]& }% j - end
, H7 F. s% w% q% z$ y/ y - return self; y! [0 g& b) ~& s5 L$ m
- end6 ?5 S- K8 \ _' Y* p
- function SunsetClock:setColor(cor,cor0)1 `4 L4 ]6 A r# ~, d3 s" Z4 W* `7 N
- if type(cor)=="number" then
8 M9 v: I' w% O+ J& l7 { - color = cor. \- O% Y3 h3 r+ S
- elseif type(cor)=="string" then
; h0 \# F1 Q6 ~8 U p - local cor = cor:match("#(.+)")
6 z, H% A& @& w! A8 n - if cor~=nil then
* A5 j: U/ v* g! r" u - color = tonumber("0x"..cor)
9 G& e$ f* s: N8 Y+ l* ~8 r - end
3 u2 P' }" D8 E - end' \% {7 T" k4 c4 D+ x1 I3 V
- if type(cor0)=="number" then
/ x9 a- Z0 q$ ]5 n! } - xcolor = cor0
0 E# P# C, h% H2 R, l, [& [ - elseif type(cor0)=="string" then
0 l5 e# L/ l2 w* {0 q - local cor1 = cor0:match("#(.+)"). C6 |' }% e' C+ x
- if cor1~=nil then
6 @- v0 p1 w! L: A8 d8 O0 b- a - xcolor = tonumber("0x"..cor1)6 F1 J, J, H& r$ I5 ]+ Q
- end
& ]4 F0 h t# q9 B" H( b# R - end7 y; L/ y& p; X Z; D, q
- end- y: q+ q6 c1 R0 n1 n4 c
- function SunsetClock:setTextSize(t)% c+ J9 T) f3 j& m! J& X0 J
- size = t
2 }% q$ I; Q& ^: X8 u7 ~- n: ]/ o) T - end, C- V* h8 _. T
- function SunsetClock:setHeight(t)
/ g' D) p9 y1 Y- v8 ]& W+ D8 X - height = t
# g h9 K2 @/ j# T - end
% s7 o# }! ?* Q- T2 e" r5 K# N - function SunsetClock:setWidth(t)2 N! W4 k1 N' c i6 O" x
- width = t; H! G0 L) F& P8 `4 E; A8 O: I* Z
- end
. o) ^/ f' j2 h6 a) X& C1 R - function SunsetClock:invalidateSelf(boolean)
H, `1 a. W( { - invaliSelf = boolean7 M4 n( j7 i. i5 ~1 [ `! j
- end' W" P- j8 C* {: a! Q" ?$ {
- function SunsetClock:setBackgroundColor(cor) A4 n+ z* v% M6 v
- if type(cor)=="number" then
W) ]6 A; I- c1 F3 a - drawcolor = cor
' [: m6 b4 ~ E% N" {% I' \! ` - elseif type(cor)=="string" then
5 p. Z! j; [6 K - local cor = cor:match("#(.+)")+ y- z. B. C# k- n" | s
- if cor~=nil then
, i. P% R( N! q% ` - drawcolor = tonumber("0x"..cor). Q3 d; ^. z1 B, ^% X
- end* Y# M3 m+ r: n4 d" O' Q
- end) |+ h6 z/ @8 o0 w |& n& r: T1 c
- end
6 h# g! Y! c+ L% W4 c - function SunsetClock:setPoortime(nn,fun)
: N$ d& W1 M% Q8 B7 B1 ^ - if (type(nn)=="number" and nn<60 and nn>0) and type(fun)=="function" then
: h; k' r4 {( Z8 }8 ~ - poortime,_function0 = nn,fun
' M9 z; p; p$ w( m, {# H( s - else
2 O: Q) O5 w3 q8 |. ]- e - poortime = 0
( j0 Y3 i( s5 b3 [( {# n - end
/ L j' B% @, @8 v - end
" H5 V) t3 w; x O; b - function SunsetClock:setOnthehour(fun)
$ u- d! v" `$ o& f. A5 w; G7 q - if type(fun)=="function" then
! k' X. E3 S8 h - _function1 = fun# q+ k& a) v5 q) w0 ]2 r
- end; E& a: C: v: B) ~
- end+ S) ^5 ^ }- t$ A
- function SunsetClock:setAlarmClock(h,m,s,fun)+ f5 ?- [ P8 c9 ] m
- if type(h)=="number" then0 t: t) [( \+ M+ z D7 L
- Clock_h = h0 m/ B8 f, W0 q1 u7 F
- else. q& J2 W# {7 z6 U' r. Y S
- Clock_h = 02 n+ p3 F; m q8 g0 n1 R5 ^9 o6 ?: O
- end
/ n- `/ \- R, d" r! z - if type(m)=="number" then3 a3 x; r% ^0 Z4 H1 I4 H
- Clock_m = m" j5 ~, o6 d; u& B& B
- else
! S6 ]; F0 ?5 N* j x7 E0 Y - Clock_m = 06 _* e) z) }/ ]/ V* u' @" [
- end
+ |( X4 k3 h! C4 ? - if type(s)=="number" then
0 J$ f; `; E# S/ C* T - Clock_s = s
4 p& m( f1 ^. V - else
4 S) q2 _$ n$ W& j6 b - Clock_s = 0+ {% A, x4 V3 U% h/ V* `
- end
% l5 n6 ]; N; O- G3 u( ^$ h$ u8 u. ` - if type(fun)=="function" then
* \9 O: }+ q- {6 N* Y3 G% k3 W - _function2 = fun
6 ]" X" Z* G5 h1 |1 ^' R - end. |$ M6 c- `5 X4 \5 s# |, X, ~
- end
/ N! W$ ~+ Z& f9 Z& B3 H9 X- I+ Q( _ - - v5 f6 T7 E* V" M- y4 Q5 l
- ; i& S a& |% B2 {
- 6 B8 o* X7 k0 G5 Y8 R. ?5 C
- 7 R$ G6 u5 {6 y+ y
- ! r& x! w& A" O% T% d
# o$ @8 B' E# U$ q$ J4 z* k- --注意不要在使用过程中修改系统时间: K4 h) J& t7 M
- z% ^9 Q! t0 X/ d- j& u, B
- local sun = SunsetClock:new(view)--初始化,传入布局id2 q" t: y, J) S% [. G% y
7 C2 d6 U+ N# h- c9 ^. @5 B, f- sun:setColor("#FF00FFFF")--设置文字颜色和设置选中框颜色,两个参数,其中一个可以为空, t; a1 }+ @6 e* o! o
- Z+ A* o0 o) m- --sun:setBackgroundColor(0x0)--设置背景色,颜色0x和#都可以
3 ~- d7 C( n0 P2 r1 ~3 w5 ^ - 4 _* [& ?2 Z' D0 K
- --sun:setTextSize(50)--文字大小,默认字体大小会跟随高度变化- }% ^( X( U9 f( v9 |
! K9 N% v0 {8 R& }- a" m0 H! o* k- --sun:setWidth(100),sun:setHeight(100)--设置画布宽高,默认跟随view高度改变( N G( X5 G' V1 e
, s) B) a2 h# J9 D: m, H, y- --sun:setEnabled(false)--false暂停定时器true恢复: V$ S) d$ E' l/ q4 i
1 {: S- m+ Z* E. A) _, Z( l( c$ {- --sun:invalidateSelf(false)false暂停画布刷新true恢复
+ a9 q- S1 A E; K8 o* Q - # h7 g4 m8 N, e
- --[[sun:setPoortime(3,function(e)
, z- g) d+ U. {+ w - print(e)" E! P9 v* ?. M4 d# h2 Z# c Q( D
- end)--整点前3秒,每秒回调]]
" D7 P1 e8 W" C1 x6 Q7 b# B# y - 5 p5 [# R4 w8 P3 F( X0 x7 o9 O
- sun:setOnthehour(function(e)* ~0 n. v- l2 ~& n5 G
- if object[e+1] then
$ M: F! g, E! }2 _1 I" W$ g4 A - soundPool.play(e+1,1,1,1,0,1)--播放报时音效:3 q; H, f& ` ?+ V, k1 \0 N9 ?1 ?/ F
- end8 M5 L% s" X+ h$ N+ U |
- end)--整点回调4 V. m" K2 h8 Z0 P8 \9 S. i
- 8 z. j2 {$ P0 J% L, Z: P6 X3 B
- --[[sun:setAlarmClock(7,26,5,function(h,m,s)
7 u$ |6 ~' {) t* X7 `: C - print(h,m,s)
" ^) h6 J* y c* k - end)--设置闹钟回调,格式小时,分钟,秒钟,回调$ m% T0 D9 z5 { j8 N" }+ I
- ]]
& T8 W* T2 u/ b; l% s8 ?$ ?1 p3 k' [
# a% J$ G6 z8 _/ c+ W. m, Z; Z: n
, S+ ?3 x) c3 I- ~) k/ {" U" j- view.setBackground(sun:getDrawable())--获取drawable画布,给布局设置背景
! O; G5 s" i3 R- s6 m - view.post(Runnable({--view加载成功的回调
$ q, F( H+ r& a( a! ? - run=function()2 Y8 R4 q8 r/ _. g2 n. r4 C
- sun:start()--启动计时器
8 S' Y7 b2 \5 E1 h, ? - end}))
" B. ]" C5 {2 e' F' @
2 j$ {1 `7 u! x& L. Z- # u" D5 S/ V- \, ~8 J
- 1 D5 a/ g9 ~5 A1 Z
- ; p1 y- o4 p4 ` H0 W: _! ?2 }; |
% ]" d" v% B; |. A; \$ f, ^- function onResume()--返回程序
7 N7 n1 V- o& l1 F - sun:invalidateSelf(true)4 y$ K. F H5 x7 }( u b
- end
- o2 m) B8 _8 b9 n* r0 J1 T
4 r6 C' {+ [3 C0 h3 u" @; E' @- function onPause()--活动暂停6 E) ~6 s" b# Q) m$ U& v* o
- sun:invalidateSelf(false)
8 ^( M3 l6 w* P% L I( } - end, Q5 }9 g& `: [( x0 C
- ; T3 ]* K0 v2 i3 m7 ]' C
- function onDestroy()--活动退出
9 E7 d& T3 V& X' u - sun:stop()--停止计时器. P5 ^& |* ~; _3 }. t. x. }
- soundPool.release()--释放
, R T9 u! W: G e" ~) Z* b: H - end
复制代码 |
|