请选择 进入手机版 | 继续访问电脑版

星空社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 490|回复: 1

[lua教程] 【lua教程】仿一个木函尺子

[复制链接]

407

主题

472

帖子

1622

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1622

荣誉管理论坛元老

发表于 2021-7-1 08:41:29 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import") k7 }) o; A, Y* M9 u) G* c
  2. import "android.app.*"
    + k9 M7 O* _# b  q
  3. import "android.os.*"
    6 H+ }( F! H3 @6 o  O; K2 _
  4. import "android.widget.*"
    % r* \" P% `; f: C3 A  y& c
  5. import "android.view.*"6 e8 q8 L' t4 Z5 Z0 [! J& Z8 R
  6. 9 z% {* N. s4 W) ]9 O4 I
  7. import "com.androlua.*"$ C2 `2 f$ Q  \0 u
  8. import "android.graphics.*"( f& z, d) S( ^" L

  9. 1 X1 |# x5 i2 s9 B

  10. * K( t* |( c2 ~$ ~% `& D, U
  11. --仿一个木函尺子功能,代码有点乱。" u) Z. a. u9 a' }6 W; x, K: G: |
  12. --想做个吸附功能
    + B2 w2 J6 g4 t6 O) ?  g# r: R

  13. 7 X# d' Q; L! K9 H# x, \; l
  14. --各种单位之间转换函数9 w$ T' }2 N' I  A
  15. function dpTopx(sdp)9 w2 v" c" \# ?7 v& q
  16.   import "android.util.TypedValue"
    ! K# |8 B. A0 e4 B
  17.   dm=this.getResources().getDisplayMetrics(); i) q. g/ h% c. b! k# e! |
  18.   types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}6 `# _0 G0 i3 J1 O
  19.   n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
    ) I; h: q  W5 S
  20.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)2 Z7 O& I" Z) }7 n. u
  21. end2 m4 |: v% z/ W7 v7 n5 d% ^/ P6 F1 S
  22.   n! {+ \+ n3 u: }  Q1 p
  23.   ~: a# l: X* m+ R2 E# {1 ^% ~
  24. 2 T, f. }4 R5 ^& \7 N. C
  25. mm=dpTopx("1mm")
    8 W5 `# ?; Q, \- v$ \

  26. 9 b' v+ s2 A6 V
  27. activity.setContentView(loadlayout({1 S2 B. K  ^$ f
  28.   FrameLayout,
    ) \4 y. I' \2 f' g8 i" i
  29.   layout_height="fill";' C) P9 @& `: G2 ~* Q% u7 F$ c% G
  30.   layout_width="fill";# D/ E& `: m' ?6 T3 Y* S& w
  31. : j$ P/ E* c. \

  32. 8 H) R4 H, V3 m- [6 _

  33. 2 B" R3 ~( h% e3 V* J8 s/ F" \
  34.   {
    ' n8 B+ {$ t+ }2 c" I1 ^* ]' f& y; s
  35.     LinearLayout;: X9 T2 M3 O; x- ~
  36.     orientation="vertical";' f* \6 p3 j5 |8 C, s0 Y
  37.     layout_height="fill";3 \! [* S* \4 [, H8 f' A1 b
  38.     layout_width="fill";
    2 p# [9 i4 y" d! r
  39.     Gravity="center|top",. l5 W/ M  f/ c* c9 h2 Z; c
  40.     {% T/ s- r7 j$ M( z
  41.       TextView;
    / m3 O( a  T& K9 y" T* g9 c
  42.       layout_height="300",9 y* I/ m  G7 V. f2 Y. ~4 u/ l; e
  43.       layout_width="fill",
    4 ?+ W" P1 G% O  J% U
  44.       layout_marginLeft="30",8 m9 u/ l) v; G
  45.       id="tv",
    2 L3 k/ A, n/ I
  46.     };
    8 f- Q' d- c# m1 w* k( n
  47.   },1 e/ a7 Z9 c: r- E& g9 Q. d
  48. 3 j$ v) @6 J1 ^% K9 j: v% G

  49. 2 x5 m& e, m9 P% ]; |4 I" H0 }
  50.   {; }; a! X* c/ a# V
  51.     LinearLayout,
    $ U+ g3 G3 \  B" c
  52.     layout_height="fill",
    7 a$ F$ N! w7 o
  53.     layout_width="fill",6 |- e1 J  a# Y; J# D
  54.     Gravity="center",+ u  f8 [6 r% `6 t' M
  55.     {
    : Q7 m, }+ I4 v5 {+ f: f9 K3 _- [, Y& u
  56.       TextView,
    6 b  f7 ~5 ?# |. A0 k
  57.       layout_height="300",: y; l0 T; `# O. r6 d6 |+ Q
  58.       layout_width="300",
    ) P$ k  Q6 K1 H4 W
  59.       text=tostring(0),
    5 m- I2 D1 H! D+ G& i
  60.       Gravity="center",
    8 v4 J6 @2 H- f
  61.       textColor="#ffffff",) ~7 ~- k7 C$ o9 ?7 G1 ^% U# ]8 U
  62.       textSize="60",
    0 x/ G/ V" J" \" l6 r7 i( L6 J
  63.       id="tv4",& h. n* T2 f5 d
  64.     },1 K9 s3 R& c' N1 ]9 G3 Q: t% Y1 g4 J
  65.   },
    3 ^/ j  w* j' G4 i* p

  66. 1 Q+ c% l! O$ Y& l

  67. . ~* y$ s( C0 Y* W. [' t! S6 ^

  68. . c% ]' ^% F% }; M
  69.   {  |2 q9 u# O' x/ a7 P/ u- y5 W
  70.     LinearLayout,1 E3 ]. d0 x; ~" ]$ X
  71.     layout_height="fill",/ ~; B' R/ x* B4 }  _/ A! G! E5 I" F
  72.     layout_width="fill",
    ; P% ]9 [. W0 b5 d3 A9 t6 R; S1 \
  73.     Gravity="center",: Z" T8 P) K% V$ j& I* E
  74.     {
    5 W  O7 c9 Z3 ~0 \& R
  75.       TextView,1 e: p1 g6 H1 l' B# Q" P
  76.       layout_height="300",
    . d8 z  @1 S/ [  ~0 f: S6 Y$ a
  77.       layout_width="300",6 G1 S- C6 |4 d; E$ Z$ b' V* Y
  78.       text=tostring(0),
    1 L; K( @! z' h; |
  79.       Gravity="center",
    1 s3 K) [1 i. g4 r; r- B
  80.       paddingTop="150",
    6 }* l5 ?, A7 H8 K
  81.       paddingLeft="150",
    5 R+ p, T, Q: @/ z. f5 i
  82.       textColor="#ffffff",% A& j9 n2 _+ q# h  A: l3 l9 m
  83.       textSize="30",
    % U( Z6 W( S( L. S- R' q
  84.       id="tv5",
    / T) P" k- a( S; S& D
  85.     },  c1 f2 {% N# ]& N) K
  86.   },. s3 p9 c# ^% _

  87. 7 J( j4 k, O& h: \- c( C
  88. # U$ X4 h* N7 s9 v9 N- L) o, E
  89. % k- [) i4 R6 m6 P3 w0 \/ r$ q
  90.   {
    ! g. L* a) J6 K% f% k. i' p; B+ L
  91.     LinearLayout,
    . }" @! `( m$ q8 P* V# D
  92.     orientation="vertical"," `( o) c% K! ?
  93.     layout_height="fill",3 @# `" M; B$ Y- X8 g, _
  94.     layout_width="fill",# E: k/ ^: t; f9 G8 I
  95.     id="tv2",. }9 c. A0 C' n% o5 t; i
  96.     {
    - g7 K$ w1 ~5 I3 h/ W2 S$ E
  97.       LinearLayout,3 d! {: U5 H5 ~  F& X: E$ N/ g- J
  98.       layout_height="fill",
    9 j) }0 @; q, U4 {2 j: @
  99.       layout_width=mm*2,/ E- E+ e( E5 k+ y- k. W
  100.       Gravity="center",
    4 u+ z& f/ S4 n" a- ^  v3 i
  101.       layout_marginLeft="30"+mm,
    * m6 a' C1 L! c6 Q+ g$ `, @& R
  102.       id="tv3",& B/ v+ m% U) L
  103.       {, B; m, ?7 W1 y8 a
  104.         TextView,
    8 U& ?$ h/ x1 z; J
  105.         layout_height="fill",
    1 Z; D8 D8 s7 M: n. y9 }9 [
  106.         layout_width="4",: }0 z! u  w( K2 V
  107.         background="#808080",( M/ Q! [) r8 P  A
  108.       },4 D) Y0 Y1 U% V/ O# b9 v- f
  109.     },, k1 B* i8 M8 O# |* Q
  110. / b" W: [. o# s  L* s3 Y
  111.   },
    ( x; `( ^9 d  _
  112. " N6 Q- }, E: j1 ]8 T) o& `
  113. - h- }- l7 R/ s, Y3 S# V& x2 ]
  114. ' m  X, w8 [4 J, f! f& k3 O
  115. })); z, @6 S3 D( M' F3 l/ v5 s1 r% E
  116. 1 u/ B7 D4 Q% e; W8 U( e0 r1 t" Z

  117. " A+ Z! C. C) T( j9 {

  118. 7 ?! L2 y% t: f5 \3 O3 m
  119. --横屏模式  ~  `( ]  D8 `& V* Q
  120. activity.setRequestedOrientation(0);$ q5 \% c  e4 s

  121. / q; g. A( m3 M5 i2 }1 @2 L
  122. ; J! ], z1 d7 g! t* b* a
  123. ; F+ M- C& T- Y. Y

  124. , }2 X  s$ R" z6 F+ p8 f

  125. 9 V* y. Z; H; l) {# x  b& k3 k

  126. & |' b2 s# H% E% @8 u6 ~' o

  127. 7 x) x( U4 K- g7 c% w1 W/ p
  128. myLuaDrawable=LuaDrawable(function(mCanvas,mPaint,mDrawable)
    7 N# C' i' i4 N8 l; w+ S9 H  m% E
  129. ( t; l& R) O/ X# t8 {
  130.   --画笔属性4 D/ W" h3 C: ~4 O
  131.   mPaint.setColor(0xFF9C9A9D)
    3 M; W; _3 l$ D9 p
  132.   mPaint.setAntiAlias(true)
    ) `. M  y; Q. i, a) N, _. T
  133.   mPaint.setStrokeWidth(2)
    . n! i: X8 F5 w" D; b5 I# U
  134.   mPaint.setStyle(Paint.Style.FILL)& Q6 {* p9 O8 C: w
  135.   mPaint.setStrokeCap(Paint.Cap.ROUND). v4 P* g/ L: c* s( @- q
  136.   mPaint.setTextSize(28)& ^, O5 [; p( |

  137. ! P) A# n2 N, E* W1 y! d% f$ n

  138. & [. n  L& `0 |, E
  139.   MaxPx=mDrawable.getBounds().right-30
    ! Y* N3 |- S7 o. e

  140. ; r, K8 P6 `( H  S1 u
  141.   MaxMm=math.ceil(MaxPx/100)) ^6 k  s9 T" ]4 N& d& e7 L& {  l
  142. " e3 ?2 V  h# N5 U$ D

  143. " f3 v* M0 U, E( @  I& e& d

  144. 9 ^1 l: a& D% o6 Y& a, M% B
  145.   --mCanvas.drawColor(0xffffeeaa)  X/ B; j& s! Z- K2 Z  L5 a: `) ?

  146. 0 }, h: x+ l5 j8 h
  147. , l% @% V, g4 g9 ?& L7 Y1 O* v2 N

  148. , S0 y4 Y' H0 V3 I4 g7 ]7 @! L
  149.   |/ _. J- S+ M3 |
  150.   for i=0,MaxMm*10 do
    , W3 c0 q+ Y8 u& O5 K% M' k$ R

  151. 9 S' E& z" w( Z/ v
  152.     if i%10==0 then9 j% z5 U* }! o  A; R2 C4 W

  153.   Y; q7 l5 n/ {. \, L& P' q% v- }1 _. P
  154.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,80,mPaint)* X6 f$ w+ ?8 {" {/ ]6 z- `. G7 m
  155. & k" L& v7 L/ H% U$ Q5 U' m
  156. 2 u" ~3 o+ u8 V& f0 C
  157.       mCanvas.drawText(tostring(math.modf(i/10)),(mm*i+mm)-mm/2 ,120, mPaint)
    + m5 [7 J/ f6 b: L
  158. 1 `2 ]% c' w0 s: o- [) N$ L
  159.      elseif i%5==0 then
    6 l1 m6 @& l: v0 G1 [

  160. : \4 m4 m* o1 h, J1 p8 I1 I8 q: e. r( R
  161.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,60,mPaint)
    ! T7 c  n- R3 E$ S; _
  162. 4 w  @! Z3 w: k& N+ `! @
  163.      else' j/ X8 _5 N: q
  164. 6 {! S1 O( H# D8 J- P! c! J
  165.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,40,mPaint)
    4 W/ N& f6 Y( \. S, q* m( P

  166. ! \, f1 p* P' I
  167.     end  }7 {: P. X4 G: _5 S

  168. ( d: |) O4 m7 Q9 S
  169.   end4 c; ~: ]) A1 b3 X: Y
  170. - Z' r- e/ g* B: s! A

  171. / w* J2 A8 a( E9 M% \6 X/ [/ E; K6 @9 N

  172. + O6 t! G# U! |; N3 ~  s

  173. " A: ~2 c9 b2 I- }. t
  174. end): }! q# `1 {3 l6 _, M

  175. # k4 i- v: W* f% I9 I# P1 D, u
  176. $ q0 c% Z+ Y2 L8 m7 b
  177. 1 [& D! x* X( x! c7 l& f! C. S
  178. --绘制的Drawble设置成控件背景; y4 L; q- I: q& D, ^
  179. tv.background=myLuaDrawable, `2 m( i3 k$ W  `
  180. 8 I" X7 w" d. s! z0 A- L" }6 V; P) N
  181. " C* y* L' P2 M  V. }! \  K2 h

  182. # |* N4 v2 a! X  i: V& {
  183. 8 [+ T, g( q; t( G3 y! F

  184. 4 ~# ?/ u6 Q- D/ y
  185. tv2.onTouch=function(v,e)
    " O$ f3 X) M1 n9 R
  186. 9 v! Z: v: c2 g! [
  187.   a=e.getAction()&255
    9 r( r# z- o2 d7 P& g' k
  188. , V6 e3 H2 M8 B* y; q
  189.   switch a
    : C' v' N1 N( _/ L: r. Q3 P, E

  190. * Q" x, o9 H2 G6 j  p
  191.    case MotionEvent.ACTION_DOWN8 `6 _8 b: e+ ~
  192. , R8 Q/ x/ V+ q1 J  |# `; Y

  193. : d) p9 U8 i& \9 [
  194.    case MotionEvent.ACTION_MOVE
    / ^- g% P' ], ]4 f, ~

  195. ( r+ P1 d9 s, h5 a
  196.     moveX=e.getX()3 c+ v) O. }# A& j
  197. ! t+ U( ?  D: z5 ~* C, D5 P
  198.     tv3.setTranslationX(moveX)
    2 C3 z* u+ ~; S; r5 `- z% i7 L* r
  199. ) w) b9 w4 I, {& Y* {! [$ `
  200.     --print("≈"..math.floor(moveX/mw).."mm")3 F- d* c$ B, J2 i7 L  N: k

  201. ! l* a) m5 Z/ T
  202.     a=math.floor((moveX/mm)/10), ~3 V/ p3 h- L- T: g

  203. + E- c% s* f9 d- {7 i
  204.     --向上取整5 Q  u0 @+ S6 Q9 A% H
  205.     tv4.Text=tostring(math.floor((moveX/mm)/10))6 C) c: w% r- I( ~
  206. 9 i4 [& a1 g/ m: i5 [% q+ p
  207.     --向上取整0 r4 C8 \) H6 q6 g: M
  208.     tv5.Text=tostring(math.floor(moveX/mm)-a*10)
    " s3 k: y+ s7 d  R4 b; S1 M

  209. % P; n' Z$ J3 _  `
  210. ! o5 C  B( @  s6 ?3 H5 r
  211.    case MotionEvent.ACTION_UP
    ( U9 w& S0 ^* o; A/ l8 Q

  212. 1 E& e4 c! V0 k$ C% G- _* I& R
  213.   end8 C8 ^+ c. m; b' R0 a$ `

  214. ; {3 I! C6 a/ O" l0 Q
  215.   return true& ^6 Y; j4 M4 N' h
  216. end4 z8 h4 e6 x8 F4 F: G

  217. ' O0 D- r" Y/ D" w- P
  218. ! {1 }. l) C$ V5 i; u7 W

  219. 2 v  @) P  h0 T9 c5 u" J

  220. 5 [" A* ~2 J* P# A! m

  221. 8 t5 `9 p' ^$ I! \
  222. myLuaDrawable2=LuaDrawable(function(mCanvas,mPaint,mDrawable)7 X) x7 w( L4 L5 L4 D

  223. + ~0 S& b6 `1 I) ?4 g! J; e
  224.   --画笔属性
    ; D/ d# m1 q6 ?* J" P  A# b
  225.   mPaint.setColor(0xFF636562)
    8 p$ B$ \! w" t/ P8 U
  226.   mPaint.setAntiAlias(true)
    6 R0 E' V- k% j2 b
  227.   mPaint.setStrokeWidth(20)4 N8 s; s1 d! b
  228.   mPaint.setStyle(Paint.Style.STROKE)" \  Q4 g0 ~! n5 {- ~/ Q
  229. * _6 z3 e' C% ^4 R
  230.   --mCanvas.drawColor(0xffffeeaa)
    7 F' T; u. X8 K6 @7 Q( H
  231. ! F4 W2 m( b) f7 j/ Y
  232.   mCanvas.drawCircle(150, 150, 100, mPaint);  ?$ X& _8 ~# s
  233. $ K) p* n$ |; C, Q+ r2 g+ e& @) ]
  234.   mPaint.setColor(0xFF9C9A9D)
    / k4 L1 S7 b( F6 L5 a3 \! n
  235.   mPaint.setStyle(Paint.Style.FILL)
    % J6 W' m5 f- f% c* L5 O1 n+ {6 t
  236. # }! t4 K& r  n" K: X
  237.   mCanvas.drawCircle(150, 150, 90, mPaint);/ j" |% M$ ^2 T* z

  238. & A1 L. Y) r( \* H6 f7 n
  239. end)& d. o" a$ `# P- t9 D8 p
  240. 9 S: U9 x0 z; E: L* j1 w( E
  241. 6 t3 F) g" u" R7 h' f! I" R

  242. ; f- d" @& k+ I. o
  243. --绘制的Drawble设置成控件背景; L9 O6 I/ o7 |
  244. tv4.background=myLuaDrawable2  [7 p/ _9 C: g5 G# U$ s, O
  245. : p9 P; N1 U. ]8 N5 A
  246. ' b3 i& s4 B- _
  247. myLuaDrawable3=LuaDrawable(function(mCanvas,mPaint,mDrawable)$ c4 Y  V" t& t& ?4 e. T
  248. + \6 k) Q2 a  g8 F" U5 A
  249.   --画笔属性
    2 Q9 r9 Y1 ?% p5 g
  250.   mPaint.setColor(0xFF434542), u% \8 O( g, n9 V- i/ h/ Q, H. O4 q
  251.   mPaint.setAntiAlias(true)
    4 X. c# x: X2 j* H
  252.   mPaint.setStrokeWidth(20)
    ( w- o- Z7 Q6 E+ q2 `& [+ L
  253.   mPaint.setStyle(Paint.Style.FILL)
    ! u  W" f& N0 a7 f0 i( w

  254. / Q# X1 D  A9 o0 @" S" z- n
  255.   mCanvas.drawCircle(225, 225, 50, mPaint);
    + @5 x3 s/ ~# Z& w

  256. % E, h2 x+ K$ |& @4 i
  257. end)  I& o. v; @7 A9 w* T" K
  258. . e; B# t% F# a4 d5 M4 A8 i# p
  259. tv5.background=myLuaDrawable3
    8 B2 k$ Q; {/ ~' d+ K
复制代码

1 J  O. K1 l4 W% D

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

喔噢  发表于 2021-7-4 09:58
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区

GMT+8, 2022-7-1 21:43 , Processed in 0.067214 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表