登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 1437|回复: 1

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

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-7-1 08:41:29 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"6 U* [9 C8 j+ l2 Q, N, A
  2. import "android.app.*"0 M2 p8 f% o' n2 Q1 R
  3. import "android.os.*"
      {( C% I9 g7 G5 G% i
  4. import "android.widget.*"; Y! N7 Y& H5 N
  5. import "android.view.*"
    1 U5 h6 _* `% i* o, j
  6. 0 F" _7 R, }  c. C
  7. import "com.androlua.*"
    ' Y: d) A8 l2 a& S2 N& s
  8. import "android.graphics.*"
    1 L9 J" D. ^, C; I
  9. : C- S8 }, o, b. g7 j5 h2 ~2 l

  10. & t( z# I  ?  ^$ N* w) Z! }9 m
  11. --仿一个木函尺子功能,代码有点乱。4 P% F; n+ q* H" _2 R8 S) H" P
  12. --想做个吸附功能/ u- u2 K" T& I8 g% K
  13. % [' }- X; `% y3 T; k- U0 U: N- R* G5 U, |
  14. --各种单位之间转换函数
    1 T4 B  d7 b, Y* ]8 N; e2 w8 @8 A
  15. function dpTopx(sdp)$ Z, B0 i& x% N! w( E5 [
  16.   import "android.util.TypedValue"8 G  P7 ]+ J2 \" B6 J( V7 `/ N3 j) f* |
  17.   dm=this.getResources().getDisplayMetrics()- z( f8 u* p8 I1 e
  18.   types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}
    $ p/ H# E" d; M
  19.   n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
    # j9 C2 [8 P6 V5 y
  20.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)
    . E, p  K, }% ^* g8 R* O7 w
  21. end8 f# ?7 }; B. t1 _" m/ m

  22. . a! Q) l; L9 q7 ~* L  s/ _$ k- v

  23. ; h+ w: ?* [) a) u  J1 E

  24. 8 M8 B/ W% \1 a; N
  25. mm=dpTopx("1mm")7 [; Q* ^5 i% e

  26. - t5 A, G8 l. q3 E& d. R, K3 P  j
  27. activity.setContentView(loadlayout({
    - s( K+ w/ A6 M' o. T9 l9 s9 I* X
  28.   FrameLayout,* `+ N9 _5 v# b) j
  29.   layout_height="fill";
    7 n9 @. o$ N  J7 @# p/ q
  30.   layout_width="fill";/ t+ D3 E* I4 S, r4 E
  31. 1 Y# B9 K- o+ p; L0 \( U* U
  32. 7 D' G- s/ ^" r  N# S

  33. 1 S3 w" z0 b0 S! _3 N% i
  34.   {
    8 A% p2 `+ B1 u' Y/ ]# _# l
  35.     LinearLayout;1 `6 i+ E- |9 |8 F/ e
  36.     orientation="vertical";
    * `% m8 J5 c2 ~! V5 F3 M' E
  37.     layout_height="fill";" A: A( Q- V( f  u% l* z4 i" T! E
  38.     layout_width="fill";
    9 Z  B+ r+ W8 v9 G; r
  39.     Gravity="center|top",
    : e# v- K! R- G7 d* d
  40.     {. q& K) F: a; H& Y1 a& ~. Y4 L- S
  41.       TextView;: |* _. l0 f1 Z6 y" ?
  42.       layout_height="300",; w' V3 |  n1 C
  43.       layout_width="fill",
    % ~6 a+ }5 W: a
  44.       layout_marginLeft="30",  p$ ^5 A3 m5 I- I
  45.       id="tv",
    3 [  n4 ]1 ]9 j/ W- e1 i( u  f+ Z
  46.     };. ?+ _4 W/ r. M( ~1 U" C
  47.   },; E, r2 {( K# b$ c

  48. 1 m, T2 D2 z1 K: p! k

  49. # }+ k( V. w& k2 \5 z4 b, P
  50.   {
    6 H) O$ W8 [$ O% N( w
  51.     LinearLayout,2 L" P$ }9 t( b  |- `" c
  52.     layout_height="fill",
    ( @9 a  a/ ~1 u0 ~' q: M
  53.     layout_width="fill",
    ' w* P/ v2 @3 n: ^
  54.     Gravity="center",& H  D9 S( m, O6 ~
  55.     {- ~; G/ ?4 l4 Q4 `0 G& M7 j
  56.       TextView,, t3 k  ^: d+ I4 T
  57.       layout_height="300",+ ~: q( F; v2 Y& k4 q8 X
  58.       layout_width="300",9 _- e( @0 O, r" S: s9 U
  59.       text=tostring(0),
    9 X6 R! p3 }- h- A  [0 E! |
  60.       Gravity="center",$ _1 Q- z# U) C3 R6 a5 F8 m+ e+ ?( I
  61.       textColor="#ffffff",
    $ O& O( a; {- q3 r. q
  62.       textSize="60",
      q( B0 w4 [$ ?) v$ T
  63.       id="tv4",
    " ^9 w# H5 p1 p0 x9 C
  64.     },
    ; |( K( z# [# m4 a# l6 f, Y
  65.   }," d+ I6 c' b4 J; D
  66. * g6 C9 |8 S% R7 E$ H. i. Q/ y" y

  67. 8 K) d1 L- O: p

  68. ( [8 p5 v0 F3 R- I+ s8 _
  69.   {3 ]$ I' T& k" _/ D
  70.     LinearLayout,
    : Z0 i) Z0 ~7 c  y: O' W+ x( Z' @
  71.     layout_height="fill",
    ! Q2 f" ?( ^* E( c7 \
  72.     layout_width="fill",
      S2 _0 D: @& {# N
  73.     Gravity="center",1 l  @9 i( i6 b* B2 |
  74.     {
    + }, e: w3 K& Y3 J4 [0 I/ x
  75.       TextView,+ Q: [- U8 |  ~: n
  76.       layout_height="300",* D' D  R* R: Z1 g0 B5 f* j0 y, o
  77.       layout_width="300",: q& [* v0 R' _) i7 F' k
  78.       text=tostring(0),  L/ A9 A; H+ B8 D# N9 d- Q# j
  79.       Gravity="center",8 T0 j' d# C( U/ n$ @6 i6 a- q3 P
  80.       paddingTop="150",
    & Y5 ?- \9 C& j
  81.       paddingLeft="150",2 K8 s" A" \3 V2 K
  82.       textColor="#ffffff",2 j1 G7 M0 j7 Z" y  |' c9 F0 z
  83.       textSize="30",
    + R0 d, w* B3 [2 }% Z
  84.       id="tv5",/ b0 V9 K  d6 D1 l# P
  85.     },& R) e$ [8 h. T1 }
  86.   },1 ?, b) [- E: x
  87. 5 ]# P1 t+ P1 ~4 \- C

  88. ( `# J, Y) ?7 j7 l8 O! D

  89. - O8 ~8 z# f1 {% @% e5 l/ z
  90.   {
    * J" G* X8 B- O* L7 h1 F; B: T
  91.     LinearLayout,
    $ S$ @: X) Q% k
  92.     orientation="vertical",8 g5 Q5 h& y. E9 u8 [. k
  93.     layout_height="fill",5 g# j& O- U3 u6 v
  94.     layout_width="fill",
    1 D+ x0 I' e$ t  b  H- b- m0 J
  95.     id="tv2",
      g" _! X$ }9 r) s; V
  96.     {
    / y/ T3 f! j2 b8 S$ \
  97.       LinearLayout,
    " h$ B, F$ s6 n0 u& q  U1 v0 m
  98.       layout_height="fill",
    7 K! L. _3 O" T- S
  99.       layout_width=mm*2,
    9 f1 x3 z) L* e1 u0 d! T( `
  100.       Gravity="center",8 ?: q- |0 B* c2 [
  101.       layout_marginLeft="30"+mm,6 b* z  B3 W  Z2 t3 s9 e0 |& P
  102.       id="tv3",
    / J. N+ ~) N: W- A! n
  103.       {6 m# {6 e& m) a
  104.         TextView,) M$ g# X. }# H
  105.         layout_height="fill",- v  n/ B* [5 x/ i: K
  106.         layout_width="4",
    . p- o5 V9 l4 y( q" p4 N* Y
  107.         background="#808080",- ^7 ^. v; n- @
  108.       },# W6 `$ s4 @9 ?! l8 H. h( ~
  109.     },
    0 p- C/ [. s  b% B6 A
  110. ; m5 l% e  h5 c9 U2 j+ T" _- V' z
  111.   },
    8 |: e2 S6 b+ F% w/ Q5 j% @: L# u

  112. : b! Y2 f% n& T/ T3 _% B
  113. & x3 o6 A& t# I

  114. 5 a0 d6 Q; A' _- i) H) p
  115. }))
    ' h! z8 R* _9 q3 l; Y
  116. * F  u  L5 E" h1 h5 h

  117. - v, b  m' q' L1 N1 H

  118. 7 b% j/ S, `7 q' M1 Q; o; w% n
  119. --横屏模式; \1 M* w3 G1 p* }
  120. activity.setRequestedOrientation(0);
    - y1 \: ^; d  e7 o

  121. - l# z% J' R" d4 ], ]! d
  122. # g( \3 X" E; A  L
  123. / P5 s) n2 o5 U, Y4 M* m
  124. " X) w4 d5 G2 Z6 m4 {
  125. ; e3 @4 @# H* ]# t
  126. 3 m+ Z1 I, N7 E' ]8 B4 W0 D

  127. ' q1 T# n" x- w, _0 R" `
  128. myLuaDrawable=LuaDrawable(function(mCanvas,mPaint,mDrawable)8 C, @8 _5 c" N6 v( S. \
  129. 9 U4 ~& ]8 f3 {( T3 h
  130.   --画笔属性
    4 L* f' Y1 e) h9 G: V- y
  131.   mPaint.setColor(0xFF9C9A9D)8 a5 u7 f# G+ p* R+ a( m
  132.   mPaint.setAntiAlias(true)( p3 X$ `2 j9 i5 v
  133.   mPaint.setStrokeWidth(2)+ O6 L4 w0 I* }+ j& w8 Q
  134.   mPaint.setStyle(Paint.Style.FILL)
    ; G$ ?( ^3 e2 Z5 q. `
  135.   mPaint.setStrokeCap(Paint.Cap.ROUND)
    ( n9 }, v( x; D. V
  136.   mPaint.setTextSize(28)
    " i7 p( S! @* k) w
  137. ) x) ^) k4 h* v$ G' j' _
  138. ) Q& \, o) O1 L
  139.   MaxPx=mDrawable.getBounds().right-304 g6 ]$ n! Q: a# o6 r% K
  140. 5 t$ {' c& z; x4 M9 V1 u) ?( Q, O
  141.   MaxMm=math.ceil(MaxPx/100)
    / K6 Z7 x! A6 h
  142. - o$ @' l1 \! p9 O' B& U  B+ P
  143.   d9 Q7 w7 j& v8 r2 T% }
  144. 3 K# e- q" u) `* l" A. [7 Q
  145.   --mCanvas.drawColor(0xffffeeaa)
    - f! Y6 K( Y# M, j  ?' [. m# A- O

  146. . F$ e: [& c- L3 }
  147. - }' @" Z2 o; B/ }& b; b7 L

  148.   l: n& R. O- N1 x! H3 Z  u7 g  r

  149. ) R, Z) {3 |4 p5 @" m
  150.   for i=0,MaxMm*10 do) l  d7 N6 E/ _* L

  151. # \/ R; w- v5 w& D9 j! h# ?  @4 G
  152.     if i%10==0 then
    , t- t3 S, ]% V* r( W. H( d4 T
  153. % I3 {# D. I" J
  154.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,80,mPaint)
    ) W# V/ l4 N" c2 t" x

  155. * ]$ }+ H6 h6 G/ ]7 b. d
  156. - R( Y0 P" v) r( W% N6 U' A
  157.       mCanvas.drawText(tostring(math.modf(i/10)),(mm*i+mm)-mm/2 ,120, mPaint)4 P1 p& X/ Z( _

  158. 8 `- r$ V$ v% h$ ]5 E( t, C
  159.      elseif i%5==0 then
    * r4 F+ F9 @! x- i/ L

  160. & v6 x: ~! x  y# h) o4 v
  161.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,60,mPaint)
    1 w/ ]8 w0 [4 Z
  162. 8 T; k  i; H+ Z: X! u, t9 F) q
  163.      else, @  V, m4 n4 C" i
  164. 3 ^# a# \- u: H' R0 m5 O+ M
  165.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,40,mPaint)
    4 v; M2 E8 r/ N1 `! m
  166. 4 t1 x: O/ g8 p3 F
  167.     end
    0 f  E: d; e- @  Y% S7 }
  168. - |9 h" p* r5 g6 y% J' s1 T
  169.   end
    - r9 U" t3 G* S( k
  170. 3 k6 ^' T* u* ]+ z9 W  K* G
  171. 7 ~3 Z+ H9 r2 L. E- `3 g7 n& z

  172. , d# D/ G4 G( m' p) P" B+ y

  173. ' `" v6 e; c0 X$ M
  174. end)5 F/ n- C$ k; A4 @( {
  175. 3 Q* z2 v5 ], F, N' `7 ?0 ~; e! d# M

  176. 5 r* }% _" v4 N. d/ L

  177. 4 [! z- b. R9 E* [6 R
  178. --绘制的Drawble设置成控件背景
    ) d. `# b7 ~, V" H7 A
  179. tv.background=myLuaDrawable
    + H9 y& ]3 c  W2 Y* d& B4 T9 U, ~: T

  180. $ G. ^5 d5 [% N% d
  181. 6 _3 u; Y; U, i/ U! c) S! j

  182. " K" U' M0 f0 a% k, a8 h( T# }' x
  183. 3 ~2 @  g8 Y0 t: z4 x( m2 h! V

  184. 3 w* S. p  G9 I' O6 d4 f# z
  185. tv2.onTouch=function(v,e)
    4 j6 A, o, P( M2 t% o$ P

  186. 7 A  ^" k5 U, X2 ?
  187.   a=e.getAction()&255* n* `  Q: a' u7 k8 l
  188. & }' v: c7 [/ r& F: s
  189.   switch a6 W3 o. B0 S; M( K; S6 q

  190. - f. F2 G, X  W# A. I7 ~$ n8 ~
  191.    case MotionEvent.ACTION_DOWN
    & _! y& h9 Z4 g

  192. + q+ b6 h5 r  S% w8 E8 |* L
  193. 7 J5 i, L) R$ L6 e0 \: W
  194.    case MotionEvent.ACTION_MOVE
    " v: O( C* a6 V% S. d" j
  195. ( Z8 h" R9 |+ I$ |8 z0 Q
  196.     moveX=e.getX(); E( `2 p' ?- \! k& x' g: o# J* G2 O

  197. ) o0 [5 A' ~: N1 K% r, z
  198.     tv3.setTranslationX(moveX)
    ; F( K2 f9 s7 j) x4 z5 u& l
  199. 6 a4 D, A! m+ T. ~, j8 r- Y& I
  200.     --print("≈"..math.floor(moveX/mw).."mm")) b  t( O: [; v$ p

  201. ; U6 l1 R  |6 u% I" ~9 g8 H' \
  202.     a=math.floor((moveX/mm)/10)* G$ a# @. o0 E7 ]0 q3 ^% F

  203. ! i0 o. ^) L* Z- G
  204.     --向上取整9 K5 C! y) Z' ~6 a( V; \% v& r: k) Y
  205.     tv4.Text=tostring(math.floor((moveX/mm)/10))$ i6 D" `- e3 B; z
  206. ! F! J5 c. y1 r$ a. b$ P/ e" O# ]3 C
  207.     --向上取整3 W* H' K% Y5 `" V
  208.     tv5.Text=tostring(math.floor(moveX/mm)-a*10)  W- O) e* i- }

  209. ( m; }! @  h' A1 L/ |

  210. 3 b, |& l4 _5 n, U# ?
  211.    case MotionEvent.ACTION_UP
    9 v) ^3 y$ V" X6 N1 w, V& y9 `
  212. - S9 ?& j; L9 Q2 o9 D
  213.   end7 G0 J1 g# G, g
  214. ) V4 I& t/ m0 i+ t4 t- d
  215.   return true
    9 J; w# y9 ^! D6 x; a* _
  216. end
    , i& j, l, o) v" [! X8 {* n
  217. 4 U" }% s% B" s3 D- I# }

  218. ! ?7 X$ o, C- F. e  ~7 `

  219. 3 J% M0 j% s- y/ _

  220. ( w) E4 Z! D( t2 e% i) G

  221. " B9 f/ N+ P% G/ l( L. d. C
  222. myLuaDrawable2=LuaDrawable(function(mCanvas,mPaint,mDrawable)
    - Q! A8 f3 f  K1 W8 U- j, ^
  223. # T: \+ c3 w# p
  224.   --画笔属性1 D, i5 H% [& Z; T" p% i; e
  225.   mPaint.setColor(0xFF636562)
    - p* [3 C) b) J: S/ h9 h4 w3 T
  226.   mPaint.setAntiAlias(true). l6 E) i: n( Z
  227.   mPaint.setStrokeWidth(20)
    ! v9 A3 C* C4 I- T" i) ^3 {
  228.   mPaint.setStyle(Paint.Style.STROKE)
    # J2 C: r& m9 V/ i

  229. 6 ]3 z  z* P. T1 p4 P- i8 u
  230.   --mCanvas.drawColor(0xffffeeaa)
    8 Y  ~7 h# b( x3 G! Z5 v
  231. : a' d& l) H2 f8 _% j. B
  232.   mCanvas.drawCircle(150, 150, 100, mPaint);2 E0 u5 H$ e, L3 H9 l; j9 {9 c

  233. % a5 n6 A' h. @. K( S
  234.   mPaint.setColor(0xFF9C9A9D), b5 g1 g: L0 ?  z( @
  235.   mPaint.setStyle(Paint.Style.FILL)* t/ k  g/ O: @

  236. 7 P& J0 a; {0 T; I
  237.   mCanvas.drawCircle(150, 150, 90, mPaint);
      S% v5 T5 z7 }! i2 U% y- y  M. {

  238. % e1 Y" K5 e4 ^: }/ d2 j) w
  239. end)+ d# B2 U& {0 A) F
  240. 2 j" F: T& c) y5 ]
  241. ! @8 R6 x: ]( C( H1 S

  242. 2 t, I( g; \" j2 a
  243. --绘制的Drawble设置成控件背景
      F+ D( M+ X7 T$ x+ g+ H
  244. tv4.background=myLuaDrawable20 T6 ^7 [1 w: J( b

  245. % w4 A0 ]  w1 Q1 Y/ U
  246. 5 d( _' z4 b2 Y# E4 Z6 N- y* x
  247. myLuaDrawable3=LuaDrawable(function(mCanvas,mPaint,mDrawable)) W) v4 c* q: t' p4 L
  248. & @- l5 @0 Y& @% c6 [0 T4 L
  249.   --画笔属性7 X" ?# h5 y! n( U; {1 z
  250.   mPaint.setColor(0xFF434542)6 i6 L4 t! h  k1 Q$ G" q
  251.   mPaint.setAntiAlias(true)
    * v6 T3 f8 b0 b7 p9 I  _* O  k( z' K
  252.   mPaint.setStrokeWidth(20)
    4 U# n7 n: {; V: C: |: T
  253.   mPaint.setStyle(Paint.Style.FILL)8 \5 k* w: R( M; T: h

  254. * v# ]' B+ j* W
  255.   mCanvas.drawCircle(225, 225, 50, mPaint);! ]# l  h: Y/ Q7 C

  256. 2 O0 `. y( Z( N& g/ D# u# g8 j
  257. end)) i$ ~; C# U0 s  g% T  a

  258. : `6 E# [" ]/ \2 @
  259. tv5.background=myLuaDrawable3
    % l8 d" G& M3 H$ `4 {+ f" S
复制代码

- E: {  P( [2 w5 b- N  O

本帖子中包含更多资源

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

x

点评

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

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-27 11:15 , Processed in 0.058873 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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