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

登录  | 立即注册

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

查看: 1413|回复: 1

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

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-7-1 08:41:29 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"9 Q& @" ?8 [6 D) C
  2. import "android.app.*"1 q0 u$ z6 r- K$ J
  3. import "android.os.*"
    ) V8 p5 A$ ]. V6 [
  4. import "android.widget.*"% u9 E/ d. W% W: f+ \
  5. import "android.view.*"
    0 l0 j3 ^9 X* n4 v" H% l! h
  6. 2 @. m3 e) _# O3 _- F( V
  7. import "com.androlua.*"
    ' R' H/ p. ~' e5 ~1 E5 S7 {  A# Q0 L& E
  8. import "android.graphics.*"& f: m+ W4 a. O2 B# K5 g3 l

  9. 6 ~7 C8 _, J4 g" i6 b6 ]. e
  10. + J$ G  w& s# G) e' ~% c
  11. --仿一个木函尺子功能,代码有点乱。6 G8 Z6 a1 ^2 V' ^  x5 |3 |
  12. --想做个吸附功能
    - d, x+ s; L4 D; [" o& F4 H

  13. , L. u- u( v3 \7 P4 n
  14. --各种单位之间转换函数0 |* y) |. @) P1 U% k6 J+ v3 t
  15. function dpTopx(sdp)0 C$ I5 t$ z% c) G
  16.   import "android.util.TypedValue"  m. ^; X3 E$ J, k) j5 L
  17.   dm=this.getResources().getDisplayMetrics()3 f; Y* B9 [) Q; ?! F- x' G
  18.   types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}' V, u) Y9 s4 l2 R  @
  19.   n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
    % u  P7 J6 p1 M1 |" S( C
  20.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)
    ; F+ Z) Y; \/ i
  21. end
    2 I, G, T) Q( |) u# l
  22. 2 P# C" O5 Y7 u# a. {2 l) |4 ^
  23. - {# I( L! j' l- T
  24. ) X6 a* o; |, @, d, b' H- V" ~
  25. mm=dpTopx("1mm")
    8 c7 O( M+ @- S0 `2 B  c+ z

  26. 8 V( v; f3 `4 r: p# r% x5 t
  27. activity.setContentView(loadlayout({& B/ S7 Q( G/ b. [
  28.   FrameLayout,
    ) o( [! V1 Q* z- E3 D
  29.   layout_height="fill";( {. O/ j9 F) h0 P7 j1 u/ x5 _
  30.   layout_width="fill";
    ' B6 H: `( j9 B) S' L* T
  31.   D; ~9 t& k2 [
  32. 7 P) S% C' O; l4 x
  33. - e& W) d4 T; ^
  34.   {( @+ n" n6 \) g6 R# W4 {: t7 n
  35.     LinearLayout;
    $ Q  K7 d; F9 J% v* w$ V# i" K
  36.     orientation="vertical";4 B: f# v- U4 w# _& C) |5 v# X
  37.     layout_height="fill";
    ' V% O# W: m  |4 w/ O, @
  38.     layout_width="fill";
    3 W' p+ t' E: V5 D4 q
  39.     Gravity="center|top",! k, {; }( a5 q" ~: D7 F
  40.     {
    + Q* d' y4 T; M( s4 G
  41.       TextView;
    7 X7 G9 r- R; \+ t# y' W
  42.       layout_height="300",9 S) l* r9 L# E( m4 [9 i' Q# S
  43.       layout_width="fill",
    2 _$ R5 `0 N5 f. v( O- B
  44.       layout_marginLeft="30",
    ! D: D: {) S$ {( m
  45.       id="tv",
    2 n% `' I" B. b- t
  46.     };
    - U5 o  A0 h% [. e3 i& ?. a
  47.   },
    . X2 y  R( o: F5 d* G, c
  48. 9 K, {; f5 t' |8 R! Q/ |: [  Z8 [

  49. 7 Z! x0 Y3 Z! x
  50.   {
    7 w6 s& b5 P$ L, E4 C. h" M: \
  51.     LinearLayout,/ ~, ~5 c: k! Y  W" s: e
  52.     layout_height="fill",
    - W0 v8 X8 h4 h: Y. m
  53.     layout_width="fill",
    - }4 E6 q- s3 L
  54.     Gravity="center",) B3 ~/ @3 g5 N; s+ `6 ?
  55.     {3 D4 y9 [. G; P0 |# s( M
  56.       TextView,
    6 \5 x& x% m' A/ h$ n$ C) Y9 h1 M# z
  57.       layout_height="300",
    6 M! V4 p9 p$ H8 X$ p
  58.       layout_width="300",
    7 G! [2 e3 j' I0 g8 ^1 J. p7 g4 H
  59.       text=tostring(0),/ y3 {; a: \8 z; b9 p$ p# a
  60.       Gravity="center",, ?* Q, O7 W. T# q: o  [
  61.       textColor="#ffffff",. m6 O/ J% G5 O
  62.       textSize="60",: T6 T& a5 D. c- `% F
  63.       id="tv4",, d5 \$ G+ g, H1 ]0 P/ i
  64.     },% b- u' s- l8 k. {; o
  65.   },
    2 F) X( q& O( y0 A2 `

  66. % n+ u5 s8 a9 j8 A
  67. 3 N' W6 E9 j, ?% E  {

  68. 8 o" N3 _# E2 n( T
  69.   {, L& U7 T9 x* g% k) X& R2 o
  70.     LinearLayout,( U! _7 ]9 R* i5 {
  71.     layout_height="fill",
    1 ~3 I% _% g: X3 z$ i* ~% x
  72.     layout_width="fill",$ j8 s' S6 j5 q1 f- T' i
  73.     Gravity="center",9 w8 |8 Q6 f; x2 K/ |: q6 m* w9 g
  74.     {
    ! i1 h( ]& X) H; a+ `8 F, L. n
  75.       TextView,* Q# B+ N6 }; P% J
  76.       layout_height="300",
    - O: Q- }8 s; m) ~+ R
  77.       layout_width="300",
    8 T  T  d2 P1 F4 _% A" q" w( i
  78.       text=tostring(0),  N$ D! a$ W6 d4 k
  79.       Gravity="center",
    - Z. O. H+ m: K
  80.       paddingTop="150",0 `' d1 ?  H% U% P$ d
  81.       paddingLeft="150",# r: S. C- Y' @3 \
  82.       textColor="#ffffff",
    ' A" x0 |% P6 j, Q. ]: I+ {
  83.       textSize="30",
    % _& W- i% z4 x+ x/ l
  84.       id="tv5",
    & v; ~( f9 ]7 f- m) g+ m  [
  85.     },
    / Y2 p7 z8 M  t: j& ?8 w6 u
  86.   },
    / F3 X3 ^0 F4 k
  87. ' a4 W1 v2 Y0 {, t  b6 L  H( A
  88. & A/ Y/ P! p, r. B( u. [% V

  89. " |/ q9 G' S5 S! C+ n
  90.   {
    / f0 z6 @$ [: y  H
  91.     LinearLayout,6 x  e/ p) N. T) K" s5 T# l
  92.     orientation="vertical",0 |& e0 ?0 B6 V' P- Y6 T
  93.     layout_height="fill",
    2 w) s1 {3 K5 H& _! R4 L8 O5 }! l8 W
  94.     layout_width="fill",
    0 A; J; s) {+ s5 d' d
  95.     id="tv2",
    ' R5 w4 o4 p; N% l( |) a' D* S
  96.     {6 g& f5 S$ _" P& x: \; C# D
  97.       LinearLayout,
    4 ]! C! {# E5 _; R
  98.       layout_height="fill",$ y( o& ?% S6 |7 H; ?, ^
  99.       layout_width=mm*2,' L" E  r' u$ V4 c; ~& [" U
  100.       Gravity="center",1 _% o* ?: x" p+ G
  101.       layout_marginLeft="30"+mm,
    $ ^+ D/ M9 F! L/ z$ f: N( J6 C, r
  102.       id="tv3",; v) A+ M$ u/ A9 s3 d0 W7 X/ A, P
  103.       {
    7 n/ [' @: p# h: ^* E/ s" `2 M
  104.         TextView,
    5 F4 Z9 S/ u: e: g& A$ W( M8 \: O
  105.         layout_height="fill",' E) z% ?2 {2 _% ~* T; D8 `
  106.         layout_width="4",
    4 M, d# K$ W& o/ R
  107.         background="#808080",5 r" {6 _2 i" w6 E
  108.       }," _6 r5 p; X  T& p
  109.     },  z* s& v8 O! r, r2 M" ^

  110. - I+ G; U) d1 `+ g6 A+ F' W
  111.   },
    + Z# J& r/ O* y' p5 H+ M! q5 S
  112. . o! l7 _; x3 c1 H
  113. 1 h( y+ m8 f% I: |7 @5 x
  114. ( t4 n) n. w) D3 M
  115. }))
    & g% w$ z$ U( [. u$ m3 J2 K3 e

  116. & X1 l. L2 a8 {
  117. ) V5 r; O' H4 I1 S/ L, I6 E
  118. ( O2 q7 v; X% I9 L6 |- {% D6 N9 ?
  119. --横屏模式: _' A+ Q+ Z: E5 ^
  120. activity.setRequestedOrientation(0);
    / F5 M! H4 d4 c
  121. ( K% d1 j* x& s* n+ {
  122. 6 i- f5 D1 L1 Q7 z; l6 O
  123. / p6 a' D9 |% h# [) _/ i- `
  124. 5 Q4 C1 K' S/ o+ t6 g; k& N# S( z
  125. , h0 q" z8 k: @6 V4 g7 n9 z, b! G

  126. : h8 }# E! a+ D5 [- q- f  d
  127. 1 X: s  j* ?4 ]& z/ O! v
  128. myLuaDrawable=LuaDrawable(function(mCanvas,mPaint,mDrawable). C6 X+ X2 T5 f% f& \, }* c# U- W
  129. 0 K; T$ q) k) S' n# C" I* y7 l
  130.   --画笔属性3 S5 N) G8 M& ]# ?
  131.   mPaint.setColor(0xFF9C9A9D)
    1 \. R5 n: i% |8 R
  132.   mPaint.setAntiAlias(true)
    , c$ K: n: f) y9 h* A
  133.   mPaint.setStrokeWidth(2)9 H, ^3 n, F3 T1 q, f4 ]3 \& H' S
  134.   mPaint.setStyle(Paint.Style.FILL)
    2 `) o: C2 D, h9 X9 f) ]2 y
  135.   mPaint.setStrokeCap(Paint.Cap.ROUND)
    ( d( T/ S3 v/ L9 z8 g
  136.   mPaint.setTextSize(28)
    6 F/ c/ {0 d& p& k- f1 L, i

  137. 4 _4 U% B9 z: s7 a* J

  138. 3 n1 p0 X/ ]' t0 ^4 X
  139.   MaxPx=mDrawable.getBounds().right-303 X/ c- r! j' U' r; m, ^
  140. 3 D' w4 F( d7 H3 g/ o
  141.   MaxMm=math.ceil(MaxPx/100)7 _! a# D' o2 X+ l4 `7 Z) _

  142. , |' z: B. N+ z

  143. 0 X4 `0 `1 f  I1 U7 i

  144. ) D9 i* [8 N" G% }: v( p: Q
  145.   --mCanvas.drawColor(0xffffeeaa): B5 [% W0 C* M/ }
  146. , j  {. e" \. O% h5 Y

  147. : ?9 V* `. P/ Y0 R: m" G
  148. 2 ~8 M! D, M% ^( ^! x- u0 }* a

  149. 1 @0 y  D8 k2 _# F% d
  150.   for i=0,MaxMm*10 do
    - g. e; y( g4 w# W9 S

  151. ! d  Y7 @$ \( ?$ o( m/ e
  152.     if i%10==0 then
    # A4 U6 b, ^8 ^6 S0 g: B

  153. 1 W9 J- e* {6 E% _. [* T2 y
  154.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,80,mPaint)
    ' J/ S' s8 E7 S3 `2 P) D+ A' _

  155. ) `# x" G) b. n: g. x

  156. : o7 k$ l! u0 B- I
  157.       mCanvas.drawText(tostring(math.modf(i/10)),(mm*i+mm)-mm/2 ,120, mPaint)& D- k2 Z% C+ Y2 G; N

  158. 3 \: g- V+ C  e' N$ P9 D- w" \
  159.      elseif i%5==0 then
    ; S7 f1 I6 y/ |6 ^" X

  160. ) _/ \3 F, Y% x
  161.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,60,mPaint)
    5 s! z. D* l; E7 g
  162. , A4 d. u. i; Q2 Y
  163.      else
    % @+ e5 L" _7 \# Q4 R

  164. $ t- O, |$ a, J; r
  165.       mCanvas.drawLine(mm*i+mm,0,mm*i+mm,40,mPaint)% _/ l  Q2 Y2 s3 }3 E% Z
  166. 3 U: [& d6 X% }8 g
  167.     end
    . l% M6 V8 ?9 _; M& }" p+ L1 a

  168. ( H1 }" R- M/ w
  169.   end8 c. [/ o1 A5 o7 b  P: O
  170. - ?2 {: i- C# e, k! x6 c, O' x
  171. ) o! k% m! }% z! Z
  172. * W. N5 t% N% n4 L" z9 L0 A* a
  173.   c2 Y" u, X( N, U& x" R3 O
  174. end)* I+ g8 H7 c; z" }, t

  175. ! P* @7 D5 K) n+ a& k2 k
  176. 5 L, A2 P( V) b. m

  177. : g$ S5 \0 W; C. u4 P, {
  178. --绘制的Drawble设置成控件背景
    5 ?! `6 e  J) R& \4 R' j; ~$ Q
  179. tv.background=myLuaDrawable
    - d8 ~2 E) T6 p' C
  180. + ^' x2 A7 b+ y: @5 y3 u  N# P2 t
  181. 1 n6 Q0 J* ~3 }  {0 Z" u

  182. 5 \( O8 I. f; C- s: N* E

  183. 0 l$ l, ?0 T; _- x. l8 t

  184. 4 e# R3 b8 w$ z
  185. tv2.onTouch=function(v,e)
    ; U: n" \) S' T

  186. ( w* n3 N! n* `$ Y/ N, q
  187.   a=e.getAction()&255( [% s3 B, A) L7 I0 |

  188. ( ^$ A+ J; c: b/ g  l, ?
  189.   switch a
    9 [; {+ d5 K! v5 |

  190. 6 _' t4 F! n& C# P% f& z, T4 {
  191.    case MotionEvent.ACTION_DOWN/ M' E- f# j) h+ o
  192. 5 D; g) J. S& \# v5 T( F

  193. 6 c3 d' D7 f: p# ^& E  H! _
  194.    case MotionEvent.ACTION_MOVE" B+ F& A6 M' E0 g; V1 d  \
  195. & s2 f+ B: f  z7 r! |
  196.     moveX=e.getX()& B! S3 E# S3 Q- o/ m" w: G% @* B
  197. 1 W7 E/ _) W8 w: H
  198.     tv3.setTranslationX(moveX)9 q5 b; w" V4 C3 @* J+ S" z
  199. $ x$ K/ H$ F6 @, _8 z1 F
  200.     --print("≈"..math.floor(moveX/mw).."mm")# F% U% X4 E% T* y6 q

  201. - p& |, n) T% N& U0 B
  202.     a=math.floor((moveX/mm)/10)0 q+ z& b' D+ J8 l' f- Q
  203. 2 y: E4 }" g/ e
  204.     --向上取整- y9 H" K) e" D" j% B- z
  205.     tv4.Text=tostring(math.floor((moveX/mm)/10))
    # a6 T  B% n, ~0 }1 r8 r$ L

  206. : C& N* @' B0 ?  b- \
  207.     --向上取整
    " Q( L7 W0 A! a
  208.     tv5.Text=tostring(math.floor(moveX/mm)-a*10)
    + l! h2 u( Y7 d/ b

  209. $ A6 G- _# x  y* S- T" E  M
  210. ; a6 L6 [7 O- R# k
  211.    case MotionEvent.ACTION_UP
    & ~3 g- W+ `# h" S5 N2 C: m2 M
  212. * I) _6 a9 W, j' o. F& X' L
  213.   end
    ' z) [+ f, d7 `! g4 f5 i

  214. ' s2 G; F# @6 C% @& h& ^
  215.   return true* S; t5 z1 l+ ?6 \& w0 J1 L$ i
  216. end
    7 A5 B1 d* x. K( S

  217. ; ]  |- e3 p# |0 B+ Z# ?
  218. ' ~5 c  v( c1 X2 p7 I+ [6 [3 n

  219. " b8 M2 @7 F3 V' Y- W% l

  220. ) F) i; y! D6 R! H$ C

  221. ) J, w. @5 I( H, J% P0 d5 r) w
  222. myLuaDrawable2=LuaDrawable(function(mCanvas,mPaint,mDrawable)
    " T# o. L0 w) ?' p/ r
  223. 4 W; e$ [8 [8 p5 {
  224.   --画笔属性
    ; v. t2 ^. T$ z
  225.   mPaint.setColor(0xFF636562): Q2 t5 H3 z2 X4 S! F
  226.   mPaint.setAntiAlias(true)0 g, P" A% Q1 b3 e: t# J' V- ~9 u
  227.   mPaint.setStrokeWidth(20)8 c6 W2 B0 B, e# ]- w) L: ?
  228.   mPaint.setStyle(Paint.Style.STROKE)
    2 |- W0 v3 {. [5 @
  229. $ J9 l7 m( \( ^6 u3 a5 ~- `3 k& h
  230.   --mCanvas.drawColor(0xffffeeaa)1 a; Z$ R1 b* T* }# L; y9 L! e1 P

  231. 9 j9 c6 \4 p7 N$ Y" N
  232.   mCanvas.drawCircle(150, 150, 100, mPaint);
    % e" Z4 @' [4 j' H6 `
  233. 4 O  `* A3 \2 P! k' k3 x! q
  234.   mPaint.setColor(0xFF9C9A9D)! q: M$ R% V# o$ L
  235.   mPaint.setStyle(Paint.Style.FILL)8 U; z' @# z3 i  _" J, i
  236. ) H/ V+ V5 l+ b+ v1 S
  237.   mCanvas.drawCircle(150, 150, 90, mPaint);2 r  R$ Y; B' `8 n% o! c2 ~
  238. . {: G! r% u; y. k8 `
  239. end): p2 P) h) [3 X+ U8 ]; a

  240. + i6 x: f! W' R

  241. 9 ^7 }& l; Z0 g9 i

  242. 2 O9 j: Y; A+ ^
  243. --绘制的Drawble设置成控件背景
    8 k  ]: y1 c/ a& `* I! t$ H
  244. tv4.background=myLuaDrawable28 f* P( S# s- l+ F0 v

  245. , n1 U' o# s" P& @5 K8 v5 G

  246. ) E7 S: M5 k- ^) o
  247. myLuaDrawable3=LuaDrawable(function(mCanvas,mPaint,mDrawable)8 h3 X" [# y' s" p* |1 H

  248. 4 N: b1 W3 O+ V+ g
  249.   --画笔属性8 O5 F3 A1 \7 L9 [
  250.   mPaint.setColor(0xFF434542)
    # F: r5 h2 B) h; ^
  251.   mPaint.setAntiAlias(true)
    - x& G" J- X+ _: C9 r9 K" \
  252.   mPaint.setStrokeWidth(20)# V8 {5 a5 A4 F. B
  253.   mPaint.setStyle(Paint.Style.FILL)4 v7 P4 b0 U9 i. h4 T8 k
  254. 2 B- @4 M8 L6 s8 g- J+ d
  255.   mCanvas.drawCircle(225, 225, 50, mPaint);& V9 b) q. S* l8 t( z+ r
  256. " F. t' `2 w8 y3 E" v: S) I) z
  257. end)
    7 J- U% [7 \: I, `5 `( x, F9 ]

  258. # e& v9 t! S% s6 ~- [
  259. tv5.background=myLuaDrawable38 I, ~" J, M, B+ l; `! u4 j
复制代码
! C( L) O0 R. T& p

本帖子中包含更多资源

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

x

点评

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

本版积分规则

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

GMT+8, 2024-3-29 00:13 , Processed in 0.053311 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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