登录  | 立即注册

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

查看: 846|回复: 0

[lua教程] 【lua源码】绘制纸感标签

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-4-4 20:31:20 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"5 u0 o+ p0 f% }) \$ g* h; x3 C2 P
  2. import "android.app.*"
    0 @$ i9 P  h* P
  3. import "android.os.*": b7 S: i" }9 n3 f
  4. import "android.widget.*"0 k1 b( H% @$ ^8 ~
  5. import "android.view.*"
    ; J: A; g" Q: W- a* z! y
  6. --分辨率转换函数5 c/ v1 H- z7 |4 ]
  7. function 转分辨率(sdp)
    1 b- n9 w% ~+ [# A7 U
  8.   --导入所需类; d0 D+ k1 t3 Y! y9 ^/ R  O
  9.   import "android.util.TypedValue"
    5 J4 D2 }, G! ^* j4 B7 g) ~

  10. ' @" q* o4 Z' R6 ?' A. ~
  11.   local dm=this.getResources().getDisplayMetrics()6 G; k8 s& Q, d1 u3 t" Q

  12. 3 g" W5 h, }) k+ {- M* A8 I
  13.   local types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}
      O$ Q( q; n5 ~% K1 b. o& {4 Q# c$ z

  14. & k) v+ X8 f- w8 X9 C3 z7 D
  15.   local n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
    + i: b9 V9 g" k5 f# B" d7 f% \

  16. % e' I' x0 F6 `  K" T& z
  17.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)
    " N' r) F6 S2 U/ ~, X
  18. 8 ~' m% h0 T. t* I
  19. end) [/ _! Y3 [- f" Z; C7 K1 K

  20. . _6 F0 X0 l, P- t2 N
  21. ( S9 m( ~; b- R
  22. function drawTag()
    5 ?$ _" g: n5 J+ p8 Q7 d

  23. " A" F" u2 f; P& U- u
  24.   import "android.graphics.RectF": T! q+ U- A( ^, v
  25. . s$ w  ^6 C/ S& S0 K
  26.   import "android.graphics.Point"2 G  z2 i7 [0 X) ~5 {3 f3 B3 F

  27. 2 P- \8 T8 ^, X& f
  28.   import "android.graphics.Paint"
    7 S: [1 T/ U: j1 v' f8 H

  29. & b' {6 b2 C. T: H3 L/ D* ?
  30.   import "android.graphics.Path"7 E0 [' i1 {* r$ F1 P8 T; H

  31. ; w. _+ Y7 U) }! }( H
  32.   import "android.graphics.Color"
    8 G% H$ }+ u1 S1 ^+ d* ~) }
  33. ( `' b, z) q; {, y) N; q
  34.   return LuaDrawable(function(c,p,d)' E1 v/ h  Q! X2 I; R( x6 n

  35. 7 N! a% L( A, k! P' P/ L4 p' ]
  36.     c.drawColor(0x00000000)0 o7 G" X4 L5 D8 r  ~

  37. 9 n7 X: t. Q# o( E
  38.     p.setAntiAlias(true);
    + ~% U4 x; K7 W4 o9 i# N5 G

  39. + A- N" K( h# }, e1 s8 O5 ?, L* L
  40.     p.setStrokeWidth(20);8 V7 r# Q9 J1 _+ X0 p8 j6 h" b$ n' ]

  41. ' K& H; b% _) T% Q* S
  42.     p.setStyle(Paint.Style.FILL);
    6 ]8 u8 |* ^/ D" M' t5 U7 l

  43. 8 ?9 X( n8 `# r& K" p, q; f
  44.     local quYu=d.bounds3 ~6 x& _- ]0 Y

  45. 4 g- U  P5 ^0 ?* S4 E# @8 ^" L
  46.     local width=quYu.right  V# q+ M$ E! v6 ?4 f

  47. 4 h* q2 h3 @$ M. ]; M" Y
  48.     local height=quYu.bottom' R( ^& i  g, x

  49. 5 U5 \: j8 u; b- U; p
  50.     local radius = 转分辨率("12dp")) v% ~6 B5 X; }: S  D- k8 d

  51.   r; {1 [) {- e% \0 y& m' b
  52.     p.setColor(0xffffffff)  Q7 s6 C, Q: [4 m0 J2 y# M" X
  53. 7 I5 X# ^$ x3 g, ]2 y- U4 I/ Z$ t, M
  54.     p.setShadowLayer(25,0,0,0x22000000)
    1 |5 `) g  E) d" W" W% z3 k3 _
  55. 2 Y! ]% D7 \6 {# ?
  56.     local path=Path();7 h8 B3 Q, J7 h9 q! `  V

  57. 2 R& |6 Y2 \5 p8 o
  58.     path.moveTo(0,radius/2);2 T+ W2 R+ |, ~

  59. , ~' V5 c1 L4 d8 y' C6 x+ W
  60.     path.arcTo(RectF(0,0,radius,radius),180,90);
    0 I4 o6 y' M/ h; K

  61. 6 h! T  f0 o! |& x* K. W5 B* x2 V) w
  62.     path.lineTo(width-radius,0);7 y! O" A, @: c' T" i0 b

  63. 9 x$ K: J( N  |1 `+ Z; `
  64.     path.arcTo(RectF(width-radius,0,width,radius),270,90);
    6 o1 T8 `4 s; U- X- F+ f

  65. 6 @+ V# A6 I! d# `. r
  66.     path.lineTo(width,height-radius/2);1 q, D4 z1 C8 {, e
  67. ) O  C: J5 M  B) N7 f
  68.     path.arcTo(RectF(width-radius,height-radius,width,height),0,90);
    1 U. y. ~! l$ c: j+ }0 ?
  69. ! b8 _" s& S1 |" c+ M
  70.     path.lineTo(width*.06,height);& d' W' s7 O: l4 q1 j
  71. 1 [/ |3 ^# W% j4 I6 P  J
  72.     path.lineTo(0,height-width*.06)
    " d4 _0 v: x+ a( a9 S8 W( m2 [" V8 q

  73. ! w6 k7 g. Q! p) g
  74.     c.drawPath(path,p);
    9 [( I. T$ v1 N  m/ E

  75. 0 N; w3 F; k% b+ {# l
  76.     p.setShadowLayer(15,1,-1,0x22000000)2 K/ P/ g+ x. s; }/ w* d$ m" Q
  77. 2 \( w7 J' B% g
  78.     local path2 = Path()
    5 ]& E* c* v* m! `# n, I

  79. : }% N$ c* u5 F# o$ ]: R2 w
  80.     path2.moveTo(0,height-width*.06)+ U  B5 r* i  l( ], K7 I: S
  81. 8 u5 k8 \1 n0 Y; `# h/ A
  82.     path2.lineTo(width*.06-radius/2,height-width*.06);' m) E% |: A- o8 B) \/ J7 C& f, p
  83. 7 C! P8 }* J% m0 U) G7 f" V
  84.     path2.arcTo(RectF(width*.06-radius,height-width*.06,width*.06,height-width*.06+radius),270,90);7 m7 _. {0 [& ^! d' I' T4 `; k9 W5 x

  85. ) ^2 k5 x9 K8 B- s/ ^! m
  86.     path2.lineTo(width*.06,height)4 u: E/ \) E, G+ y  b! ~: g

  87. / R( B" H4 J9 ?! X4 {' r
  88.     c.drawPath(path2,p)
    % e: }) c8 x2 ]! v# c' L
  89. : v2 Q$ F  Y( R- R" Y$ e7 J
  90.   end): t3 s5 L) a) ~) S5 g* p, F' W
  91. . n$ d0 E/ Y; C9 m
  92. end9 |- ?  b; F* c; ^

  93. $ V) J( }" a' a+ |% d$ j
  94. 9 U2 I9 l1 n/ b7 a  x
  95. 1 D* d; T. \: V: a9 R

  96. & B' {" {7 {; [* i/ @( C) R
  97. ( O5 ~  c5 c; _/ A4 y: L
  98. function setTxt(view,view2)
    7 _1 _8 m" O4 }( T% D
  99.   local txt={"不好意思,我把你弄丢了。",
    ) _- C) h" D# P# G# T* f* V
  100.     "长风破浪会有时,直挂云帆济沧海。",
    $ C5 ^9 ~# t9 z) f  X
  101.     "你是无意穿堂风,偏偏孤倨引山洪。",8 M. c5 z" V& J, v0 _: _5 G
  102.     "愿你天黑有灯,下雨有伞,未来的路有良人相伴。",5 V; {3 W% K! K
  103.     "我有一个梦,也许有一天,灿烂的阳光能照进黑暗森林。",  @6 w# U9 U1 C" o* R) i
  104.     "自古美人如名将,不许人间见白头。",
    ! n' u/ c7 S: \- r, B. k! c! A
  105.     "什么都无法舍弃的人,什么都无法改变。",/ \1 ~8 c  c4 n
  106.     "天不生我李淳罡,剑道万古长如夜。",! Q8 ]0 t/ l, D7 F
  107.     "斑竹枝,斑竹枝,点点泪痕寄相思。",# x& @& x) A+ v; J( p4 }* n+ {
  108.     "一切都会变好,超级好,爆好,无敌好。"," Q, E0 t% R& e
  109.     "把喜欢的一切留在身边,这便是努力的意义。",
    6 X+ T! Q3 o# h! {$ C
  110.     "悲喜自渡,他人难悟易误。",
    % z8 D$ d9 ^/ [% V
  111.     "且以深情共白首,愿无岁月可回头"}0 }, Y  d* l" W, i- u, v4 y
  112.   import "java.io.File"
    8 K8 \: q* ~$ W/ [$ e: H4 _
  113.   import "android.graphics.Typeface"
    ; u. W3 P  G5 P# S' ~
  114. -- local bf=File(activity.getLuaDir().."/hkhbt.ttf");4 J( D' L* o8 V$ i( s1 F
  115. -- local tf=Typeface.createFromFile(bf)- g  P* ?/ q7 ]
  116.   view.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);
    ( \7 S4 L/ V9 A
  117.   view2.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);
    7 F" I1 @" N7 u
  118.   Http.get("https://v1.hitokoto.cn/?encode=json","utf8",function(code,content,cookie,header)! P0 V8 {2 y/ Y. `1 ~
  119.     if code==200 then* S7 A3 w6 r2 q4 @7 U
  120.       local cjson=import "cjson"
    3 o: X" d# s- x. O" o# s
  121.       local json=cjson.decode(content): X& R- \8 X9 Z. C- }. b& R0 h
  122.       view.setText(json.hitokoto)1 @9 c2 ?) z# P9 }; _5 I
  123.       view2.setText("——"..(json.from or "未知作者"))
    1 ~, J3 V- f/ G3 s5 |) c
  124.      else" m) u/ H' ]7 F
  125.       view.setText(txt[math.random(0,12)])% K8 \1 L; c6 K' w- [
  126.       view2.setText("——没有网络"); [$ Q3 l' Q6 n; V
  127.     end
    6 Y0 A! T/ J9 f. i" \8 U
  128.   end)& {& y9 {7 G" X
  129. end" Q2 j/ @! o1 H9 B) U0 I: d

  130. : k, ^5 f0 z; j* p3 I5 t2 r
  131. 2 \8 a5 a# c2 P

  132. ' N) }& E5 g$ V) G. ^
  133. * a7 \2 d1 C; X1 Z( r, y) F; Z

  134. $ J% ?+ H, V7 n! d/ ~& f
  135. layout={
    ; F; s  T0 e$ ~7 j, F
  136.   FrameLayout;
    # [- L3 X% n" V9 {
  137.   layout_height="fill";
    7 F3 Y# \4 o: U! D  z, ]
  138.   layout_width="fill";; L  p3 J% _3 E* P1 }
  139.   clipChildren=false;) N* `# u5 f. u! p& ?4 D9 W  U8 x7 p. o( T
  140.   background="#ffffffff";
    3 \/ Q2 Z; p: O0 g$ w4 B" U- d6 J
  141.   {! z) D4 G" e7 x1 H. m9 K5 D
  142.     LinearLayout;
    5 y" T( K8 M# M. q$ b3 {4 b$ J5 H
  143.     layout_height="30%w";
    ! X# Z5 j' K  X. B# q& n
  144.     layout_width="90%w";9 ^7 _: w! [) N$ l% O
  145.     layout_gravity="center";/ H. Q5 a1 v9 S# @0 |) I3 E
  146.     backgroundDrawable=drawTag();: k2 L! W3 \" |" T, X0 p: v9 b/ T2 b+ R
  147.     orientation="vertical";% R( A- S' q2 i8 n8 t0 L
  148.     {* \/ Q5 ]8 ]' M' S$ A) d! U0 J; Y
  149.       FrameLayout;3 f* L/ W+ g% O* e
  150.       layout_height="fill";
    ( c3 Q, x& f; i! l" ~2 x
  151.       layout_width="fill";/ O6 ]% t, G8 N% K8 A; f3 L
  152.       layout_weight="1";
    " ]. U2 }' h. g
  153.       {6 D9 W+ }$ _( F: S& \: A6 [4 J2 k
  154.         TextView;( V5 ^1 ]" a% ?0 m2 _
  155.         id="yiyan_txt";4 i/ ?6 F9 j* i4 e: O
  156.         textSize="13dp";
      o+ g, \6 E# a* r& P2 T
  157.         textColor="#ff333333";- \( L, G0 q; p0 l1 q
  158.         layout_height="fill";
    8 c6 U4 |2 C" K4 s. r
  159.         layout_width="fill";3 ], E# M: T% m" [7 E: C' a, o
  160.         layout_margin="15dp";
    - }( L; Z2 P  t- Z* s, y
  161.       }# b5 y- n7 _' ^; i! A7 F5 s3 j
  162.     },
    % `: J# F1 O% I) R& B% ]) l
  163.     {4 N6 O; [% M7 o8 w) e2 w; Y
  164.       TextView;" K- U+ L/ x4 h8 }- G! K: T
  165.       id="yiyan_wri";
    9 |* A1 A  }& x) A
  166.       textSize="13dp";
    2 ]) g  p/ p& x3 _" K+ ?
  167.       textColor="#ff333333";
    + `9 f; g$ k$ S
  168.       layout_height="wrap";
    6 U+ d. m' x1 ~
  169.       layout_width="fill";
    7 I& u7 C8 o! D8 t$ V
  170.       layout_marginTop="0dp";7 Q+ B! I1 ^6 @) N1 Y/ Z
  171.       layout_marginRight="15dp";0 A0 v. T9 x6 q1 T4 D: }8 L
  172.       layout_marginLeft="25dp";9 Q! s  J0 s1 Q! v4 @. s$ W7 _
  173.       layout_marginBottom="10dp";$ \8 Q' A# \% E  v4 {& _
  174.       gravity="center|right";3 A# I4 {/ @9 C# ?, P3 {" F, W
  175.     }: P( ]' ?3 T) h9 W' z; r
  176.   }
    ' b  ^6 F$ Y: B! y: d
  177. }. L9 X$ i' w6 _3 w! n
  178. activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题
    $ _/ Y1 y3 F/ X0 i/ l

  179. $ s/ O1 B- f6 T! `6 w1 B) a
  180. activity.setContentView(loadlayout(layout))% {$ ~' _, k& ^# r" ?

  181. # H+ F. [& l0 c5 Q3 x
  182. setTxt(yiyan_txt,yiyan_wri)
    ! e* V6 D: t4 o4 F) l
  183. 9 j: z$ Z3 I* f& \' z8 X- e4 C
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-29 05:02 , Processed in 0.052988 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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