|
- --程序启动时会执行的事件 L M' L: _" w" V/ L/ l
- function 物理效果(id,灵敏度)
0 U7 ~) f( |( p+ e5 d' _: k - if not (__IIll00oo==nil)then7 J; s0 q. p9 Y- u( A& Y
- error("此代码仅允许运行一次,若需对多个控件操作的,请在id处输入一个table")
' M4 I7 z4 Q+ G6 l - end' J/ |5 Z0 m9 e- ]
- if not (type(id)=="table")then V9 X, S" v9 F2 q5 J/ t7 ?
- __IIll00oo={}9 f# n1 m! U4 z5 T" a
- table.insert(__IIll00oo,id)
! l3 u- @" G8 s- L! ] - else
! m: Z6 q" d5 Z# s1 E/ ? - __IIll00oo=id
/ x7 K1 X; U% C# h9 J - end
% ?0 W) P: P* B! k* } C' I - local l = 灵敏度 or 5
7 y+ @; C0 {( T" f - require "import"
1 [3 e# @8 C. u, [6 r8 @) `2 I - import "android.content.Context". e. n# f) g; K) h/ y
- import "android.hardware.Sensor"/ J9 h! ?1 }( K! L, }. E7 ^8 E
- import "android.hardware.SensorEvent"2 L: L( Z( {/ m
- import "android.hardware.SensorEventListener"+ P; @6 o8 O, G. u: |
- import "android.hardware.SensorManager"$ g8 o5 p% }/ E* ?2 {
- local x轴,y轴,z轴$ g; a6 v% X2 P7 E( ~
- 传感器 = activity.getSystemService(Context.SENSOR_SERVICE)
1 Y/ N' W. D [0 m' N3 F9 U - local 加速度传感器 = 传感器.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
k( H/ q- t/ e$ k* x+ K' v - 传感器.registerListener(SensorEventListener({
+ s2 v" N7 v" S: V+ Y9 M% e - onSensorChanged=function(event)
7 D; f$ H! z/ L/ a2 p) Y3 M6 j- y - local x轴 = event.values[0]
& Z. n& ^( c8 T6 k. t - local y轴 = event.values[1]
- l8 d' z% r8 _8 F, T - local z轴 = event.values[2]- U: [! Y; v4 [* u7 }
- for v,k in pairs(__IIll00oo) do
# U1 T* W. [8 ^ k- |( E - k.setRotationX(y轴*l)3 `5 q) H, v7 G* f
- k.setRotationY(x轴*l)
6 Z+ {. Z. Z' a2 ?, s- d - end: K5 U1 U4 R: U% k2 O ]6 L
- end,nil}), 加速度传感器, SensorManager.SENSOR_DELAY_NORMAL)
; Z) b4 k$ ~8 z) k6 I7 }* c H& w* I - end
- }6 T. B/ n* L* p0 e. t J -
$ b1 j5 K/ u" ]1 j7 c# x5 T - 指南针=
7 ^3 y4 A; g. o7 a - {7 v9 a4 F' {4 K7 ~9 _2 b+ i6 K, u
- LinearLayout;5 K- O5 a1 V' l) M4 ]9 a9 l% X: q
- orientation="vertical";
3 Y) ?# ?9 [- w - layout_width="fill";0 z2 O w' m$ y; r; m
- layout_height="fill";
3 _+ n8 s4 b/ X W) x9 Z2 q - id="coe",6 S9 }3 _0 K+ {; L
- gravity="center";
1 f7 J& Z: C$ y - {5 L2 T3 F- t* ^- D6 U1 S
- TextView;
! X6 e U$ ]. l' Q - id="dir";
: i4 N* ?6 g o/ W! _( \2 ]6 m ^ - layout_width="fill";
0 i; @( M+ @0 u - textColor="#0090FF";
& I) N3 u3 p7 a$ f0 h7 K - layout_height="7%h";3 }- k! T% I: I# M
- textSize="25dp";( Z) A9 Y2 }0 m, y4 I
- gravity="center";
) n. l* l; p0 c8 r& f - text="南";
' \% X0 F8 C2 l9 R$ H+ c9 G - };
. {! ~+ G: g! s# U8 T - {/ K/ J" ]( u2 J+ k
. s# i4 H" V$ O' r1 ]# W
1 D$ \3 a' _9 p2 G4 _4 z& V- LinearLayout;
# m8 ^. e8 B8 ^5 l" [ - id="cors";) E. u: a& D7 e+ X/ T! @3 X
- orientation="vertical";0 d( t9 V( k* f( i& @
- layout_width="70%w";" Z3 i' @9 g' D3 G+ B; G8 t% \
- gravity="center";
" V+ {" |+ D0 e" R* N* d* l - layout_height="70%w";
* v" \' \0 u8 | - {6 \2 b, m% |) m! w2 t4 x
- LinearLayout;
& x5 Z) {2 E4 `. B; X) r - layout_gravity="center";, K" c, P C5 D# X
- orientation="vertical";- N* E. c3 [3 k0 f; F$ P, g' O
- id="cor";5 @# `/ D! H; R, d& r0 x2 q1 p2 ^* {
- layout_width="50%w";
" K- B4 k9 w4 w/ B, t; d - gravity="start";/ T( e+ Z: ^ E/ }( q. T% K) N
- layout_height="50%w";( t+ E' _: ~- w( E# e$ j% U+ F
- {
: L8 J& S* u4 R) | - TextView;. ?9 h3 o; L* h* p
- layout_gravity="center";5 { t9 o8 \' |+ ?0 w+ p
- textColor="#0088ff";4 f h: U: |. M3 T8 I! ` m
- id="n";
9 V& P8 f ?% _ - textSize="20dp";' N% C% U! _( {) G: s) L
- gravity="center";: \7 j u! I* S3 d" k
- text="N";
5 [" r0 I6 P- _ - };
" C |9 |. @0 X3 e - { T# c8 _1 g0 t4 v" c
- LinearLayout;& ?" B/ X3 s5 E+ G- _1 F6 j. k
- layout_width="fill";
! H$ C( R: Q: R/ s* T C; M0 c, o - layout_marginTop="6%h";
" d4 i4 ~, ^0 { - layout_height="8%h";
3 ]. R8 c0 R- N, q - {- |' H1 H8 n+ J" b7 @5 W
- TextView;; d$ L) T+ g+ k0 g; t' [) [& E
- id="w";
! a: a- B; _6 J) c0 }; {$ C - textColor="0xff0088ff";
8 [9 B$ d; I3 f: _2 p" j+ k - paddingLeft="6dp";; i7 c4 m0 \: e
- textSize="20dp";
" `, T J( F/ g% m1 F - gravity="left";
( r2 J! L/ a& v0 e; R) f - text="W";
; D" p; Q- U- J6 e - };# L) ] N- B5 G
- {, j7 h" m+ }4 X
- TextView;
/ A9 t. } g4 N1 Y t - layout_width="16.5%w";5 Y: Y/ _" z/ a0 O; N+ m
- layout_marginLeft="9%w";
! u1 c! Z1 P( |, X - textColor="0xff0088ff";7 P! L# A* Y5 P. x5 ~4 t
- layout_height="8%h";
% Z; F0 G8 c; p$ \! r. D# [+ p - textSize="27dp";
7 W, n7 ]) ^. f# V) E - gravity="center";
! ]- S- j( K9 C8 n - text="";
) O0 z6 `% ^, i$ J8 e - };7 j! P; O9 h9 t5 m
- {0 ?+ r+ U) T) A$ n# v$ f L0 z5 ~% V
- TextView;
% j- W+ q+ p$ a7 F4 I1 h - layout_marginRight="6dp";
" g. r& N# w* M. [ O; ~ - id="e";
, M/ v- W1 z, T$ C! G - layout_marginLeft="11%w";
9 D1 F) s1 E' G0 P' @. v+ R* o6 q - textColor="0xff0088ff";+ C1 w. }9 b* T1 o$ k( K2 @* @) [
- textSize="20dp";
+ g4 [( Z0 M5 H9 q0 i# d( t - layout_width="6%w";% d2 E3 ^! V, l
- gravity="right";
7 X# X4 g1 H2 P. f# W - text="E";
. s- z; ~3 m4 v) g - };
4 m) b) |$ M" g7 |+ b: _+ {. k - };& c9 N: Z* H! z# `5 `. b: r; ~
- {) \4 {& f! a6 I4 c+ ^8 y# d# @
- TextView;1 D% X! {* m) y6 A2 P
- layout_gravity="center";
2 ~3 p7 r" s: f6 Y% f - layout_marginTop="11%h";. {1 d- q* Y; l
- textColor="#0088ff";0 f. P3 L- @" Q+ e- [
- id="s";) L- v5 ^2 v4 k& ]9 |
- textSize="20dp";
8 ? K, c! p5 [+ R" q - gravity="center";' C9 b4 k2 p7 R
- text="S";
$ d c$ ?& F0 x8 ~1 L7 q" A8 r1 U7 l - ! y2 W9 O( d9 n& `
- };4 @* {" g; B" X$ H. L, g
- };
6 a3 N; ?$ |4 ^( S% {" k! Y
1 F* H0 A" P1 B4 o1 O. g- };
: p {! T# Q# i& b6 `" T - {
; _ W4 s% @+ n8 _ - TextView;
7 x8 c. \( f& t4 X - id="deg";3 M" p7 h# V. |8 V- n4 f
- textColor="0xff0088ff";
9 y* k, d2 N$ U2 z8 e2 l" G - layout_height="8%h";2 R! m. j4 b' F( q3 P8 W
- textSize="27dp";
2 `1 g9 m" y1 h# @ - gravity="center";
/ K7 O5 p8 G/ w) G u: |' ? - text="0°";% D! k! P$ u6 j& G9 _3 Y
- };, J3 f6 p, |0 k1 \+ F' `
- };
9 N/ S! R7 A/ c7 w6 l - $ J" z- Q$ ^6 R5 c; p9 b( \- N4 F! P5 F
- webView.addView(loadlayout(指南针))' {, Q, L' _1 a, I
! L+ r2 P2 y, { A) A- import "android.content.Context", _5 N5 Q) f/ U( W
- import "android.hardware.SensorManager"- I9 D A- u, ?8 A
- import "android.hardware.SensorEventListener"
" Q; Y, P3 R$ Y% a+ l8 k - import "android.hardware.Sensor"+ n+ |4 A" t5 ~7 M
- dirs=""
0 F/ b& C' _. d - FPS=60
0 E2 o' w& d2 Z B, C - 磁场=06 h( u6 {& o% e) U' X' s
- 传感器 = activity.getSystemService(Context.SENSOR_SERVICE)
( q2 l! u: Q+ r; w6 R; M% T - local 磁场传感器 = 传感器.getDefaultSensor(Sensor.TYPE_ORIENTATION) A/ s0 C X* Z9 x' Q
- 传感器.registerListener(SensorEventListener({ 3 X$ d/ `! }8 ~" P
- onSensorChanged=function(event)
6 j- x8 B( O2 M+ ` - 磁场 = event.values[0]
' t1 E6 }* d0 W$ ]: N W. C - end,nil}), 磁场传感器, SensorManager.SENSOR_DELAY_NORMAL)5 \: B) H/ g# q' [
- function CircleButton(view,InsideColor,radiu,da,db)1 g9 A- Y% B' @6 Z9 A( F0 Y9 M
- import "android.graphics.drawable.GradientDrawable"0 {( }; {0 s' [$ J7 e$ F" G
- drawable = GradientDrawable()
/ M1 s; C9 m7 q - drawable.setShape(GradientDrawable.RECTANGLE)
3 x" Y2 |! \' d4 f - drawable.setStroke(10, 0xff0088ff,da,db)' V1 h+ O/ U5 r
- drawable.setColor(InsideColor) ) R/ e+ m$ _$ g3 P0 G
- drawable.setCornerRadii({radiu,radiu,radiu,radiu,radiu,radiu,radiu,radiu});4 ^* N! p& @- e+ x( A+ l
- drawable.setGradientType(1)
, s) h4 ^; ^/ d" ?. r( c% i - view.setBackgroundDrawable(drawable): a/ w2 M4 A( a! t0 l( _" U9 R
- end6 S6 B( i0 H. K* p0 d1 ~
- 角度=activity.getWidth()
9 e$ U/ r2 D' O1 p- I+ W - 控件id=cor
/ J# N' k5 C8 Y0 `$ B& X$ R" O - 控件颜色=0xFFFFFFFF- N( J! _6 Y3 q( z" E' B0 X( Y+ I9 \4 j
- CircleButton(控件id,控件颜色,角度,2,2)
\. J0 G( X& \) v( U3 e3 I - CircleButton(cors,控件颜色,角度,(activity.getWidth()*0.8)/2,10)
9 x, n8 R* ?8 D: q - tick=Ticker()
& D5 E* x% F/ y+ C7 b' K7 j& K - tick.Period=1000/FPS
4 }6 D3 t7 E. U6 q; Q/ K - tick.onTick=function()
4 g7 f* y! d/ h c% g8 f - if 磁场>165 and 磁场<195 then. J* \6 J( z/ ^! _ V
- dirs="南"
3 s$ f) o, |( p6 G( L; g+ L; _ - elseif 磁场>195 and 磁场<255 then
6 F, e) n$ B: q# {* ~) a2 D1 K9 E! } - dirs="西南"" s' n; g' P- F5 H
- elseif 磁场>255 and 磁场<285 then `; @/ I" ]: S6 S
- dirs="西"% f% Q6 U Q: b, ^; X1 D3 P
- elseif 磁场>285 and 磁场<345 then
4 n D E2 }. M. ` - dirs="西北"
9 \1 F& B3 p" e! j3 U6 V - elseif 磁场>345 or 磁场<15 then$ {. M8 u3 V" W: | D+ @
- dirs="北"
) a1 P2 Q! k& D3 [) m1 { - elseif 磁场>15 and 磁场<75 then
" z' K1 ]9 W2 H- ^0 R7 v - dirs="东北"
# v, G! q1 I& }* M A- o, r4 X - elseif 磁场>75 and 磁场<105 then2 s' d8 S1 G# k- O0 T& o$ o6 a
- dirs="东"
( @/ B' }' i# H' d( {7 R2 H4 c: @ - elseif 磁场>105 and 磁场<165 then
7 {2 R, b! d6 C L* j% P; ?8 ] - dirs="东南"/ I3 V2 n$ v- B% V" a, r$ H3 }
- end9 Z7 S" m# l2 D* n. i5 D4 I+ @
- dir.setText(dirs)
3 ^8 ]" r: V7 u# t( z8 x; t - cors.setRotation(360-磁场)
$ H1 z. W# ~4 g4 ` - w.setRotation(磁场)2 R0 i( b" z( _5 D# j% k3 I4 I* q
- s.setRotation(磁场)% _2 G- {/ E. U& o
- n.setRotation(磁场)
i- f! H E( s$ {- m; R' u - e.setRotation(磁场)( A8 f" U2 z7 A% ?
- deg.setText(tostring(tointeger(磁场).."°"))
- e( l1 U, E" L& A5 r. b; N9 _ - --Toast.makeText(activity,tostring(磁场.."°"),Toast.LENGTH_SHORT).show()
$ |7 [# ] |2 t" b: m+ p - end
2 ]/ {- J, T. O" K' L# ] - tick.start()
- d3 s9 Z9 u% b! H! {/ S- | - # @. W4 Z& E: S
- function onDestroy()0 `/ k0 L" I3 u$ t
- tick.stop()
1 q; n8 b/ F ~" {* S" n6 [9 I - 传感器.unregisterListener(Listener);3 k* C0 M; T+ `' j, k0 a" W
- end/ t" z$ M9 g9 K" E, |8 V# [
. g) r$ |+ f8 @4 @3 I- function onTouchEvent(event)$ ~) o7 q/ F) D# k- K
- ac=event.action/ `6 x; T/ r; f6 `
- if ac==2 or ac==0 then4 J0 Z1 G: ]8 i$ h# w* [) M
- x=event.X+ D0 T7 D3 \. _) g: o
- y=event.Y4 A: n9 J) W+ j1 m3 f6 `! {
- coe.setRotationX((activity.getHeight()-y)/30)
! I" b( k2 B1 u3 ]) V - coe.setRotationY(x/30)
( k! f, j1 e: d - elseif ac==1 then: O# N% g1 b1 ~, D) Z$ o' g0 ~0 O
- coe.setRotationX(0)1 T9 l( x2 O0 j- b& G' A
- coe.setRotationY(0)
' I% r1 m" J4 K+ m7 l7 ]5 J - end
# z$ q" l" o( b. I% e5 b - end
5 J2 r0 X9 x! t1 @ - --coe.setRotationX(activity.getHeight()*0.33)
5 }7 ]6 ^7 @7 n* J! z7 a+ \ - dir.getPaint().setFakeBoldText(true). E. g1 M+ p& N( q* r9 Z* r6 W
- deg.getPaint().setFakeBoldText(true)' g' G* O6 Y! q
- ( ~8 I2 P3 Q( @3 P0 X
- import "android.content.Context"& W( |- M1 l8 @4 B4 P
- import "android.hardware.SensorManager"
6 P Q& `+ B" ^8 E - import "android.hardware.SensorEventListener"6 A: P" O: P2 _+ u7 U& u9 x6 o
- import "android.hardware.Sensor"
% t$ v" [0 d+ U7 ^0 f/ w - dirs=""7 _: v' B8 S2 D. Z" R8 Y
- FPS=50
4 d( n( d( C$ v1 t1 [. b# a2 Z% T3 R - 磁场=0
n& {+ p' C) m+ h: I# [ - 传感器 = activity.getSystemService(Context.SENSOR_SERVICE); h. e5 d0 p& `
- local 磁场传感器 = 传感器.getDefaultSensor(Sensor.TYPE_ORIENTATION)
0 }/ ]( p7 X3 \. i c - 传感器.registerListener(SensorEventListener({ / ~* K/ A6 c" l$ w0 n* G
- onSensorChanged=function(event) 1 ?) W$ D! `5 H- `+ y1 y7 ]. S* c0 P
- 磁场 = event.values[0]
* E( Q3 ~( Y1 o. B# P - end,nil}), 磁场传感器, SensorManager.SENSOR_DELAY_NORMAL)7 f5 m# @) s+ \& d# j4 \( ^
- function CircleButton(view,InsideColor,radiu,da,db)) \# x; r3 J" }* m
- import "android.graphics.drawable.GradientDrawable"
; Q* n4 Y; t) X7 C: F% Q% I - drawable = GradientDrawable()
5 ~; O- M1 L' A7 q - drawable.setShape(GradientDrawable.RECTANGLE)
# v! G4 F; t5 l7 T% m - drawable.setStroke(10, 0xff0088ff,da,db)
) w, B2 {/ }6 w# \! o$ c* A - drawable.setColor(InsideColor)
+ r3 A" _; K X5 d4 P: p5 J. n+ V - drawable.setCornerRadii({radiu,radiu,radiu,radiu,radiu,radiu,radiu,radiu});
" E3 |8 s) Z, D9 E4 u6 x% M3 y - drawable.setGradientType(1)! X5 z& d( ^5 j" b3 g3 I
- view.setBackgroundDrawable(drawable)
. T% |6 @; @, p6 S1 ~$ W - end
+ m$ w6 d' A* e n7 k+ k+ N - 角度=activity.getWidth()) P) j2 c3 x; F4 ~/ d* \3 A: o* |
- 控件id=cor4 r; I3 J2 D+ L* M; K e
- 控件颜色=0xFFFFFFFF5 `. e! B3 s# _, f- U
- CircleButton(控件id,控件颜色,角度,2,2)! e: { j" ~( }1 O, `% m2 B
- CircleButton(cors,控件颜色,角度,(activity.getWidth()*0.8)/2,10)
6 C* V$ E, P* R8 F6 C3 }7 L- E" Q6 | - tick=Ticker(); d9 ^+ g( a1 M/ T2 S z3 w, F3 u
- tick.Period=1000/FPS
- H7 S( \! S$ a# D c r' L - tick.onTick=function()
. C2 {$ z, [4 [7 Q" Z/ U - if 磁场>165 and 磁场<195 then
) I9 j: Z- ]+ K5 ~$ w1 P; N g2 v - dirs="南"7 u# N( j* m% g0 V" m# y$ p, `
- elseif 磁场>195 and 磁场<255 then
% L# |, B) d3 G- c% ~ - dirs="西南", F0 Q: ?- d) b5 M9 O( N: [% F" ]
- elseif 磁场>255 and 磁场<285 then: b. Q/ l0 R# n1 l0 O( f: c: T
- dirs="西"
- |2 S8 B6 d) v" H- Z8 N - elseif 磁场>285 and 磁场<345 then4 N3 W2 E- @$ A- e
- dirs="西北"4 g' L1 |9 d. @3 M2 k4 n2 U
- elseif 磁场>345 or 磁场<15 then! u. M9 N+ C* }& c3 w
- dirs="北"9 _6 T9 w% ^: F* @0 V
- elseif 磁场>15 and 磁场<75 then
* ]9 I4 P8 k2 g" }, j# z$ [ - dirs="东北"
7 B' n& L& L$ Y% ?* r - elseif 磁场>75 and 磁场<105 then
0 S0 d- D8 |. ]; X: @# T! F: K - dirs="东"3 d! Q B! `- U& s! A4 a
- elseif 磁场>105 and 磁场<165 then9 r! N4 s+ b# o- T; ^3 Y
- dirs="东南"6 i9 d7 u( A/ P F; ^# {
- end6 L3 D5 u5 v% H0 {
- dir.setText(dirs)) y/ f: o0 O+ Q# v4 y
- cors.setRotation(360-磁场)
5 r8 q4 I W* q2 V% V& _0 L6 n1 d - w.setRotation(磁场)
" T7 G/ ~0 m1 n) G8 @- Y - s.setRotation(磁场)9 b4 n0 n% M+ Q, }
- n.setRotation(磁场)! ^2 S" j& h% i$ x( Y/ v
- e.setRotation(磁场)- |2 R7 t4 I4 ?
- deg.setText(tostring(tointeger(磁场).."°"))
7 P8 p* f1 F" D. f* C, e - --Toast.makeText(activity,tostring(磁场.."°"),Toast.LENGTH_SHORT).show()
% p3 x7 K8 }2 U3 b/ D - end" [4 j! S) L5 R, ~2 E, Y& v
- tick.start()
+ b. q: ?. z- ^/ a! G/ l5 ~
5 E6 } p1 K2 ]; y* `/ C- function onDestroy()/ w4 s6 s& i5 g8 V2 p; p7 u
- tick.stop()
/ m# k+ t: Z4 M2 J- T. E6 r - 传感器.unregisterListener(Listener);4 H( j7 X# T' G2 m( t( x2 I
- end/ B) k2 D1 m. c
5 f1 U1 p) {% P- function onTouchEvent(event)
6 L: ?: J$ y9 K- `7 v - ac=event.action+ J. r' @7 J" t/ |, R0 ^
- if ac==2 or ac==0 then6 k0 s2 r* Y, X. v
- x=event.X r9 ^' u; c( J4 R* F$ V4 F% ]
- y=event.Y
: C' s$ k9 ~+ }- i - coe.setRotationX((activity.getHeight()-y)/30)' `) u6 p( |3 G& R# L
- coe.setRotationY(x/30): B! {1 D6 |5 n% |4 b( `
- elseif ac==1 then
. w, T6 X3 [7 M - coe.setRotationX(0)
8 ?! {3 \; c P7 B- t1 F" F - coe.setRotationY(0)
) w8 j/ [6 _; {+ X. F - end$ G/ h) X; Q, J! U: T6 X3 w
- end
+ E$ _0 g' K! i0 E - --coe.setRotationX(activity.getHeight()*0.33)
: T$ L* c! r! J5 x6 V+ z5 i* @ - dir.getPaint().setFakeBoldText(true)
# x+ R) N I! j9 k$ v - deg.getPaint().setFakeBoldText(true)1 w: C L! ]; D" F/ O& f
- 物理效果(coe,4)
复制代码 |
|