|
- --Copyright© Ayaka_Ago. All Rights Reserved.
4 r6 _/ G- G) d3 v2 B4 ^% n1 @) J - require"import"
9 Z( b$ | q+ k. { - import"android.hardware.SensorEventListener"$ Q5 R* ?7 x S+ W) ~0 X
- import"android.hardware.SensorManager", A, I: q5 X9 t6 u2 W
- import"android.hardware.Sensor"
( g p% S* n8 ^1 H5 r% n5 u) G8 I0 B - --setOrientation(0)# D4 @6 ?8 p, A0 L
- h=activity.getHeight()--! }. X! E { \
- w=activity.getWidth()# i( T, D; b& R
- import "android.graphics.ColorFilter"
3 X b& O- K) d8 | - import "android.hardware.camera2.CameraManager" h8 {! \- |5 J3 V3 V% F
- import "android.widget.PageView"# i2 o/ j3 ?: F" e2 y& Z3 \
- import "android.hardware.SensorEventListener"* J7 c2 t" m/ n. [% K4 B
- import "android.hardware.Sensor"0 a' X% v! O1 a m" _
- import "android.widget.FrameLayout". v) c& h$ n$ g
- import "android.content.Context"- f$ ?0 s) s) F% B' s9 L. L, q# ]
- import "android.widget.ImageView"* f% S( F( J% J9 k* z* e4 G
- import "android.hardware.SensorManager"8 V3 g. }' Z4 y0 Q* h' f! D
- import "android.widget.TextView"2 x$ M/ W* |0 R* @. E
- import "android.widget.LinearLayout"
6 g! p9 L, A+ U1 M - import "android.widget.CircleImageView"' ` E! `( J: M% H* t) D: b- u
- import "com.nirenr.Color"8 q+ n8 x+ w' V
- import "android.graphics.Color"
& |1 b+ X; X6 d* ^- v' W2 a0 B& C - import "android.text.Html"& Y1 R# q) S/ Z7 ~* B2 k0 ^
- import "android.graphics.drawable.GradientDrawable"' z( x- d( v |' E6 B
- activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题1 s) B' G- b% v. I) K3 X+ s
- local CameraManager=this.getSystemService(Context.CAMERA_SERVICE)--相机
|6 G/ v# G& C2 ]3 X% \; E8 k - local sensorManager=this.getSystemService(Context.SENSOR_SERVICE)--传感器
; |: c' }* S: Z" F% s3 j& u' _ - local OrientationSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)--方向
# V' t( D) a- |( k - local curp=09 R! T& P5 H, x) W z
9 \( y/ Y" k, F: W7 U- \- local function rim(radiu,da,db,c,inside)" x+ _$ s9 n. t* n
- return GradientDrawable().setShape(GradientDrawable.RECTANGLE).setStroke(10,c or 文字色,da,db).setColor(inside or 0).setCornerRadii({radiu,radiu,radiu,radiu,radiu,radiu,radiu,radiu}).setGradientType(1)
" x ?6 I7 k+ _8 c - end' L2 P% y* D! v# N- G
- / b* @+ E6 Q8 p7 l" F5 F( k! F
- aa={ }; _& j5 }( g w$ g* M$ r- a
- FrameLayout,
0 f, u3 v' h) G6 q$ S7 X$ {# _+ L - {6 B# U0 _6 x3 Z5 h
- PageView,
0 _2 A1 @+ p0 ?" F - OverScrollMode=2,+ j( o: S% h: {9 n( i2 ^
- layout_width="fill",# R, B8 e0 [ b. e
- layout_height="fill",
# E8 l5 M2 o \; ~4 ?. C - onPageChangeListener={
" @6 n% T+ T: C/ ` R - onPageSelected=function (p)
3 A' p' A$ X' V6 y. r - curp=p/ L3 p& j* d6 `
- if p==0 then2 \* B+ y4 i( p+ f
- compass_title.setText("指南针")1 H- U6 i6 Z( f5 ~6 o/ z! F' s
- compass_indicator.getChildAt(0).setColorFilter(Color.DKGRAY)8 _! _ F9 W, j9 b4 ^
- compass_indicator.getChildAt(1).setColorFilter(Color.LTGRAY)
# K+ [' I1 S( M* o - else
5 W4 T- u9 T& N - compass_title.setText("水平仪")- C" P5 m0 L# @0 k" B ?$ I( F
- compass_indicator.getChildAt(0).setColorFilter(Color.LTGRAY)
) Y, N9 |$ k4 R2 T - compass_indicator.getChildAt(1).setColorFilter(Color.DKGRAY)7 F: {. W2 d8 a4 L
- end9 b" ]' C* @ k) e2 q+ I# Y) C
- end},
y* e, ~' n3 q% _. m% O - id="pgs",# T; E9 Z v) M
- pages={; M2 z1 j! L8 {- Q; `5 g7 n
- {
" n X7 {9 @$ `4 I/ Z# F' @' P- I* I - LinearLayout,
/ T% E" N' k( N, s7 q0 E) T/ k7 G - orientation="vertical", S7 Q# Q; J( \7 D8 |- h7 V
- gravity="center",# J V: n( ~& `- g! F+ o9 @ r
- layout_width="fill",
& s) ?3 F: F7 V* p n! C - {- ?0 u2 X4 J; q& k; N
- FrameLayout,
$ @; w/ Y6 ?4 _ - layout_width="250dp",
: m! S3 I6 A/ _ - layout_height="250dp",
/ C& c7 V5 ~/ r& L$ a; ] - layout_gravity="center",2 e1 A' X7 r1 v
- id="compass_circle",! M# F+ u# J( ~3 y) i5 n+ R
- {) X8 N% y) z: ?8 J1 n/ y: a
- FrameLayout,
( |; ^8 J' }" D2 ~! B$ ^ - backgroundDrawable=rim(w,w*0.008,w*0.016),
2 w5 H. o7 _( d1 i% L' [- z2 y - layout_width="fill",# C) L' c' P. Q. o. T4 k8 r
- layout_height="fill",
7 R) ?+ X( p% P1 o9 g+ W. P5 ]3 v1 U - },2 j& K) u& p! v! M: b7 ^
- {6 r" Y& T a: D+ y
- TextView,
9 q4 F# v: G }, I) C - layout_gravity="top|center",
# F# v1 o: X* j3 } - / K8 q) D5 p# w4 e8 U2 b
- id="compass_north",0 Z8 d, V( w# _7 c
- textSize="20dp",6 R9 |! L2 z0 x( q
- gravity="center",
; c1 {; L1 f/ J: q - layout_marginTop="16dp",
0 e. T w: u d - text="N",
, v7 e. [1 r1 P! I- A8 J - },
, j( T8 d2 L! J- y6 o8 R - {
1 @0 l8 \5 t: L2 c8 D( ?5 j' V - TextView,
9 ]* K) m4 g# v% X! e - id="compass_west",
) _- o9 y8 Y3 x -
. O5 j& V9 x# w9 m' y/ s8 ]# y" p - textSize="20dp",
- \9 h; X7 O6 b7 d+ Q: ?% m - layout_marginLeft="16dp",
' N5 R0 v+ O V: N! p, o1 w - layout_gravity="center|left",
! s4 ]( t J( {6 e - text="W",
# @ P c7 n# e3 Y/ W! | - },
8 W6 C& h+ Q& Z9 \7 H1 H - {
* r* p! T1 S/ S' X - ImageView,
8 A/ p3 H' C L, _$ @ - src="icon.png",9 Y' \" e! Y( `7 {
- layout_height="42dp",* j" T# v2 x/ |# v) F( z9 ]
- layout_gravity="center",
+ K* g% u6 K+ U6 ?. s - layout_width="42dp",7 J8 d8 F r5 E' {" s) x
- rotation=90,0 A3 c! F8 T( z! h6 f
- ColorFilter=强调色,
1 _9 h- z; j0 R# H0 r - },
$ F. u1 R. c; P$ } - {
# @( r! b5 Q5 V2 Q0 M q - TextView,
4 |- l* m& p1 j4 o& S: w% q+ _ - id="compass_east",& X# B* k Q# h% C4 h( ` l+ c- [
- layout_marginRight="16dp",# R; d# ^( M* h' S5 }
- textColor=文字色,% J" `! t: A% B* p
- textSize="20dp",
% E) ^( j2 j. t - layout_gravity="center|right",
( y2 b n! y% M+ I4 j, h( F - text="E",
% ?8 }8 d& @$ W; S% Q& r' k - },% n% P( i5 Y# S2 p$ Y
- {9 d) ^5 a+ j) z
- TextView,& |% W+ [& N1 ]
- layout_gravity="bottom|center",
3 ~% M& M ?' a) t% Q9 r; X+ D - textColor=文字色,
9 F; f( a4 b! R" h! y( f( O - id="compass_south",
; N4 h: _9 `3 N f. T5 u* t - textSize="20dp",
" P3 V. q3 k& K0 B - layout_marginBottom="16dp",
" Q- m6 N8 r. s2 P - text="S",
4 |+ R! K+ C6 l, [, s - },2 C& k) E/ Q1 g) I' G
- },6 u) b e2 S- z' T ?# K
- {
7 L+ |3 ^6 b3 r$ a% X0 ^% t" M3 T - TextView,
k5 w0 }) k/ M6 z# C - id="current_dir",
. a+ w* ~! D- J - layout_width="fill",
9 A) W- Y' Q/ E8 c, N$ j$ X - , A+ Y! c8 J% w3 K( z; S
- textSize="25dp",
; f# g; {+ E5 O1 R$ E - text="北",& R9 `) {) K. {4 q
- layout_marginTop="56dp",9 c. ]% e y! D Q8 w6 E4 J
- gravity="center",
" d; U% ~7 l! {5 R+ N! D - },* L& `1 Y( m! F6 N
- {
' u; m# M9 F* c4 h G - TextView,
, a. H" x6 C! m0 S - id="compass_degree",
, G8 K5 p3 t' w, D5 k - text="0",
, j* P0 Z. L' A4 V. @' Y0 l+ o - ! G$ W% {( z$ O+ {
- textSize="25dp",
) ]7 r6 d4 T3 Q& V: L - layout_marginTop="12dp",
+ U7 q/ b" d; ?. d7 _ - gravity="center",
. w t$ U8 s/ Q4 v. z; r$ { - layout_width="fill",
$ S! R( L: I. F' h - },3 ]. l, y7 J. u! w5 _& D Q; c
- },
% ]8 \0 g6 D7 v) W- n* O3 i& e - {1 U K4 N5 k- E8 b
- FrameLayout,
1 [, F. y& J- q3 _! u - layout_width="fill",/ S; q2 E8 J: J3 T
- layout_height="fill",
' \# C6 u, B* T% r: K8 p C8 H - {
9 ?7 Z( Y7 q% R: S M( t) @) s - FrameLayout,7 E6 b- `1 m5 V. e# x; a
- backgroundDrawable=rim(w,h,0,文字色),5 H- w6 {3 g0 J& m0 V1 W
- layout_width="148dp",( w# n9 I- {) h; `$ S
- layout_gravity="center",
% L4 f# j3 e% I - id="compass_balanceline",+ k3 D [# j# a
- layout_height="148dp",
* l k" d- b4 u& l3 F - },( j( t1 s6 p* v' ^. y
- {5 y- u" F" R2 M! \# W" K, K
- FrameLayout,
k$ D3 P# h5 R8 x i0 j8 N7 P - -- foreground=rim(w,h,0,图标色,图标色),! L; U( f( Q/ X/ T7 S0 u
- layout_width="148dp",
4 d6 l; p) r) S" v$ z7 w$ X9 g - layout_gravity="center"," P/ I6 W: P1 f, l
- id="compass_balance",
! |2 Y4 b1 `/ s! }( o- J9 O - layout_height="148dp",
( G) @0 L' s' R2 y6 ?; J - },
3 A9 ^+ S- `8 p* Q - {, L. C2 F- @" |7 L
- LinearLayout,
4 H' Q( F5 [, P) b. w% d3 \5 m% } - layout_width="fill",7 W# o9 ?- U' e- {
- layout_marginBottom="64dp",
/ N0 ?4 x) T) X. ~/ e3 B5 o - layout_gravity="bottom",! L" D% h# ~9 D4 k, r
- {
/ N8 V, \4 X$ Z% y# |: c5 v( k - LinearLayout,3 m6 J2 q. L3 L
- layout_weight=1,
1 |6 ?$ ^) t1 t% Q - gravity="center",
) \; f v7 ?# V- L: W% ~. H4 Y - orientation="vertical",0 ^& Z( F: n( ^
- {
" z$ ?& k( L' a* H- u" `% a - TextView,
0 X8 M8 \& j# }$ j - id="balance_x",. B( \1 Z6 M. G' Z
- text="0",- k+ c! v; P- T
- textSize="16dp",) E' `+ h* T! t* r
- textColor=文字色,
% t0 K1 \7 I4 H+ ~. k9 X7 e - },
9 i( z2 v; ?) k& P( A3 U0 g# G - {
1 M0 P2 z( D" ^- x/ z% q6 w3 U D' | - TextView,# P, T! j Z2 \0 _( a1 W
- text="X",8 p. g1 `/ | Y$ ]
- textSize="14dp",
5 s2 l5 S/ c& W4 p0 T* h- z - textColor=次要文字色,. A! g5 U! B8 |" q" m
- },: E( l& l0 n* L( G+ _5 o
- },
. f5 z; M# F2 F* B% j - {
: Y7 q6 i& k0 l - LinearLayout,
1 P& A* V2 A; q/ z - layout_weight=1,/ R" e w! l5 B
- gravity="center",
+ f2 r4 o8 Y% Y: W# X, u9 F/ m$ ]4 y) W - orientation="vertical",0 o9 x. ?! c) v5 K! ~6 Y8 H8 a
- {2 h" E" z( q& {$ _4 u X5 @3 p
- TextView,
7 E/ _4 ^& w/ c6 q5 p; i- ^( ?$ @ - id="balance_y",; I1 h; {* M2 c& [, l
- text="0",8 y% |9 `* X7 I
- textSize="16dp",9 n4 {9 @3 o( v& Z. X" v; @* D g- a
- textColor=文字色,
% }7 N7 M# n( N. U - },# P6 i X6 l) k3 K
- {& r& x3 I% O0 `4 b
- TextView,
R# T8 x, L& Y1 L% M6 b - text="Y",
. V- b2 A$ }, j - textSize="14dp",) O; t* \3 M# Z% E# v$ S
- textColor=次要文字色,) z% F6 ~- {' s! q! N. M
- },
# P5 F. N7 R$ V - },4 Y7 L; Q( D9 |$ h3 m
- },
4 f: I v1 S) Y- Y- D; R - },3 _" {7 I, d: ]' `) ]" P
- },--pages
* k0 s; \5 B; y; @+ ]# l. e: R - },--pageview2 {8 B& I5 E, r9 r% t
- {
' W2 `' P+ S5 ?6 y3 c5 L2 ^0 Y, \ - LinearLayout,
. W3 a" Q" i6 [6 ]0 j" ~& t - layout_width="fill",
, c1 Y1 ]6 t/ ^3 R - layout_gravity="bottom",, B6 E& d; Z O0 V" l# O1 r( V
- gravity="center",
. ]5 f) ^" x5 ?5 v7 n4 S0 b* `# e - layout_marginBottom="24dp",9 a1 J3 }2 @5 ]* q r& f
- id="compass_indicator",6 }" v2 r3 ~( y, p) G, M
- {% l) `. F2 m( @0 N7 I7 l, j" r
- CircleImageView,) F- L) ?/ |; A
- src="drawable/dot.png",
1 ^. c, `: a7 r. Q$ {) Z* L - layout_width="6dp",, i8 q2 A5 t8 P
- --colorFilter=Color.DKGRAY,
, b; A" \6 `. s0 c - layout_height="6dp",1 j) h! I4 G8 a) A5 \
- layout_marginRight="4dp",
6 S5 D. P( D. C3 {, k - },$ {2 O A, U( e) }% U* I( F2 f
- {# D5 x- b7 @5 c6 l* F, t
- CircleImageView,* c& B! A {+ f6 u9 w# i+ q* D7 P
- src="drawable/dot.png",
! }' f7 y. c' N' Y! } S1 I+ v - --colorFilter=Color.GRAY,
0 a9 e+ F+ _: w2 ?$ u5 L - layout_width="6dp",
$ L2 H5 c2 o( m+ W" L7 u8 | - layout_height="6dp",
4 ]# u# F# ^8 ^/ y - },
4 ~7 V# _1 C4 U. `' D8 u) P$ {% g - },$ w5 A; U/ G4 X+ k
- {# Y8 L7 b! S) Y$ Z8 `1 c
- LinearLayout,; ~/ P& |; ?9 N' B2 `2 Q3 y5 `: Q
- layout_height="52dp",
0 R2 H8 Y" ~, I8 @ - {$ v+ v$ S c, y+ Y" p
- TextView,
) O3 j" y+ b% t" J3 a - textSize="18dp",
9 G+ a$ N& C0 `; f - textColor=图标色,
( ?$ g. y4 i' N# }( t K* { - text="指南针",; ~1 w# ^. u; P; W& H1 M
- layout_height="fill",
* P8 k, \9 r9 s5 p& o - paddingLeft="16dp",
; V- F8 j0 R( N0 ~6 r0 ~( r - paddingRight="8dp",. t' Z6 ^+ s) [! `6 E6 [( I1 ~7 f* p2 G
- id="compass_title",7 g9 c# B$ b4 H% S, B6 l, U/ @
- gravity="center|left",
- U4 q0 o3 l) ~( B) y - },5 H' |* K( h' S+ [: h
- {--标题旁边的问号& h% V5 h5 Y0 s% u
- ImageView,) v* I! H( U) ]8 [
- layout_width="52dp",
8 N& R3 y; U) D+ P* C - layout_height="fill",
- P7 ^! A2 S: n6 u" d9 d) B+ x - padding="16dp",3 T3 I0 I6 T5 z$ Q
- onClick=function()) i8 j" {: a$ J% V4 m" T, T& i
- a.fun.dia("指南针与水平仪",Html.fromHtml("\t\t校准指南针:<br><br>\t\t· 绕 8 字转动手机<br>\t\t· 远离磁场干扰"),"我知道了")
( X& Q/ T+ O5 I* A - end,+ l( Z/ \' e( p4 t/ |4 @; A9 d% X
- --foreground=波纹(),: s: O* R; P4 d, ]7 X5 `
- src="drawable/help_circle.png",
+ P* h, r% K7 U0 I2 k, z, t - id="compass_question",$ v# P" s' B; G4 b; Z
- colorFilter=图标色,
6 L% h1 g( w' \2 U/ a6 m - --visibility=8,
" t3 d+ F4 I5 J1 |8 w- a: D9 \$ L - },( e* b/ u4 F- J( y" n, i
- },8 F- X2 N& c+ L. \' n5 K
- }
3 O8 D x+ C8 r+ I: X% y6 h - activity.setContentView(loadlayout(aa))4 P* Y& Z8 `, b2 g4 a& U" ~
, q7 X% _. ~* K# b1 m- if OrientationSensor then--有这个传感器; m( T( o* E+ f8 J
- 3 |3 A* l- B; _0 r
- function onResume()
! k) E6 A* y/ q/ K) ~ - if not listener then
6 w ], f' ~) x/ e - listener=SensorEventListener({
1 x3 L" B% a8 i( A: Q# J - onSensorChanged=function(e)( t0 h* b+ @6 T) u0 L4 c% U
- infoChnaged=true
, G" k. P; F( ~1 l! e* s - local z=e.values[0]
/ P" w0 n1 X: y8 k0 p+ v - local y=e.values[1]
6 B; T& y3 O2 D - local x=e.values[2]% D0 B: Q1 P9 J% t4 [# r
- if z>330 or z<45 then
3 a5 _# x$ v) h& ]0 T; W# A: d7 e, E - current_dir.setText("北")
: t4 X0 j5 i4 n R6 L7 I* b. g' z - elseif z>315 then0 P( i) v! R- `2 e0 G% A8 t. Q. |
- current_dir.setText("西北")2 |% f* u6 V2 z( Z: O
- elseif z>255 then
- I. ?( ]/ [" Y% r0 l u1 `) i - current_dir.setText("西")4 w5 ?5 K9 u$ b& W) x' f) N* Y
- elseif z>220 then
) j; G: @, _( L - current_dir.setText("西南")
, S' ^- Y0 I9 T; q - elseif z>165 then6 ?8 J3 Z) N Z8 e9 N( u
- current_dir.setText("南"), R/ R7 E8 x+ m" @7 h
- elseif z>125 then
0 M" s) F/ k9 t1 l - current_dir.setText("东南")9 {/ a" |/ E. U5 s8 M, r: I
- elseif z>75 then
& O) O9 r% N+ u0 v, m4 F - current_dir.setText("东"); m1 {: l; t; R* C; J4 n
- elseif z>=45 then4 c4 ]) R3 x1 ]8 F! q# s2 l
- current_dir.setText("东北"), K9 O0 c/ y" F
- end E4 c! n q# h4 s( R
- compass_circle.setRotation(360-z)
: b/ W; H( R0 q9 X - compass_south.setRotation(z)
( A% M9 `3 F2 [. `6 c - compass_west.setRotation(z)9 ~" {' u4 M4 @/ Z
- compass_east.setRotation(z) N9 E/ A' T8 _1 H7 r/ L: g
- compass_north.setRotation(z)
3 y5 A6 r. y4 {" q3 I - compass_degree.setText(" "..tointeger(z).."°")! O# ^( Z. I0 o+ g: j0 a
- compass_balance.setTranslationX(x*3.5); n( X# b5 [ M. O, V7 n
- compass_balance.setTranslationY(y*3.5)
5 L+ l- Q T* i1 v3 M4 P1 p6 p - balance_x.setText(""..tointeger(x))
, ~5 z, e4 ?2 s - balance_y.setText(""..tointeger(y)). W: }& d4 Y k2 h4 Y& W$ d
- end})
) b2 x9 I5 r3 I- t2 F6 u3 Z" v& f - sensorManager.registerListener(listener,OrientationSensor,SensorManager.SENSOR_DELAY_FASTEST)
$ x! Q x# B! }$ R& v - end( b) a% @. K4 k; F1 y
- end9 F/ X5 ~& @2 t
- m+ j0 B# `: |0 }( J- function onPause()
+ R8 l0 ^5 n; Q5 R/ ~4 a. I6 m - if listener then
3 A0 f9 g( l5 p' W - sensorManager.unregisterListener(listener)
& s1 A3 O9 X& T! n( N1 Z, J8 l - listener=nil
8 z* d% s: l3 l6 ^% _% I+ z* t) S4 k - end
r2 d# p; A% y5 i# ?8 p - end& o/ [) }: a5 K2 B' `
0 m. q5 g7 k2 t3 M3 ?- function onDestroy()
3 x8 ]/ B, p4 \8 A- l0 B - if listener then) ^3 Z+ v$ n' C6 Z2 g& T9 u
- sensorManager.unregisterListener(listener)* ]/ b4 S- U# l/ G; W% F
- listener=nil
7 c4 h8 t$ s, X( d! I# v" ~ - end- c" \. M$ ?/ R7 |
- end
# L& E3 Y- Z R
2 j" h. F j. v- A" M$ `: H, Y8 ]- task(1000,function(): ^8 I/ I) T# K# J; v: n+ \
- if not infoChnaged then1 @) `2 c, C9 C9 b
- onResume()" ]) A% s3 |# t$ a! N! |
- end2 A: u. ]. N4 C
- end)
' G( q1 s. b* `* a5 M# G
* b* I B# t* d/ ^' ]0 q- function onKeyDown(k)
8 l4 P! a% _, G6 Q/ t! d6 w - if k==4 and curp~=0 then
; J4 H3 a8 K- ^7 ^5 T, S- @8 | - pgs.showPage(0)& f2 l6 i6 w( V
- return true4 o5 u/ J& Z% }: s( j
- end
2 u5 |4 H6 \% F% r$ A - end! K5 Q5 B+ k, e2 f/ K* e% E
, A1 a" v; m3 q- else--没这个传感器: M1 t" H9 `* b9 `, L* E1 o9 N; U
- print("您的设备不支持此功能")
+ E- \7 c0 C6 ]( v; z$ a( w - this.finish()6 i1 O6 l1 X% a5 j) O. n/ _+ D9 o# O
- end
复制代码 |
|