登录  | 立即注册

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

查看: 1315|回复: 0

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

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-7-1 08:38:03 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"# M/ p. h; K0 @& i1 p6 m
  2. import "android.app.*"
    4 j) T% s5 \0 \) d1 p8 H
  3. import "android.os.*"! o, [5 B5 j) H+ G0 A
  4. import "android.widget.*"% v2 [3 N) x+ g
  5. import "android.view.*"( W7 R( X* X+ \/ z
  6. --分辨率转换函数
    ( w( a6 n2 n. E2 K
  7. function 转分辨率(sdp)
    1 T5 _- p( \/ \9 L( m1 d
  8.   --导入所需类6 T# l' j) o2 G
  9.   import "android.util.TypedValue") {5 M. q  ~& C- f# k  S

  10. 0 j3 W) O3 t7 k$ P* h
  11.   local dm=this.getResources().getDisplayMetrics()7 I, T& c! o& t  r4 w: l

  12. 3 X3 l. {5 L* D8 f
  13.   local types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}+ \, w/ B3 w2 N; ]9 g

  14.   }$ x, I0 s: d9 c
  15.   local n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
    3 a% e3 j, w0 e# o7 o1 ]

  16. : |" U* e3 T; D3 b% f2 E
  17.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)
    + V2 t) M: U6 p" F( G5 J- y1 t
  18. ! S% A. l3 u2 r: {5 {1 p% j
  19. end
    - i7 p$ ]* Y" P! K( G
  20. 7 j2 R/ ]1 X$ L2 ], m. p, p

  21. / B9 o  r+ F% Q; N) `9 `  v
  22. function drawTag()
    / k6 o. [2 x7 u% s! H4 ?
  23. / P6 b: k1 c$ d* v8 d9 {7 p
  24.   import "android.graphics.RectF"4 M0 U2 C( `$ {0 s1 F
  25.   V, a' W2 U+ A% Q! m3 I+ p; |
  26.   import "android.graphics.Point"5 C2 `" v% k0 e4 U/ o* l9 Z* E

  27. ; N5 k& A% ^$ \: j; w- n
  28.   import "android.graphics.Paint"
    ) I' T$ |8 w- `. b& s

  29. " W8 Q. U0 t8 R+ W$ `
  30.   import "android.graphics.Path"
    * `3 r& `: z! q2 G( [7 m" _

  31. : J; K$ R5 k4 K6 w2 p) N
  32.   import "android.graphics.Color"
    1 k6 c2 d! `: ?/ t" T+ o
  33. $ J) g$ ]" w# j& Z* D& [& R
  34.   return LuaDrawable(function(c,p,d)# X9 Y, _  w; [$ I- a4 e
  35. / p( [2 E  s7 @' V  v# P
  36.     c.drawColor(0x00000000)
    - p/ {. }  }! i# P
  37. ' C: r6 }5 P1 E- B
  38.     p.setAntiAlias(true);0 c& g. R9 E: \- s+ L/ l
  39. # y5 \0 \  x( w' V# j
  40.     p.setStrokeWidth(20);& h, }. i# w: e
  41. 5 h3 ~, S  e3 i% P  O* ]5 L
  42.     p.setStyle(Paint.Style.FILL);
    9 T, }& @' _8 t9 N2 r; {4 n

  43. 1 a* U+ f) N( L# ]. K, q
  44.     local quYu=d.bounds! N* g. B' C' N0 \( g% F. t8 t, M
  45. " Q9 }) X! O% y
  46.     local width=quYu.right0 R: q! t2 D1 {  {7 W( I2 J
  47. 1 t! k* c9 z9 Q& @, q
  48.     local height=quYu.bottom9 V. G! X1 Z* f! a+ ?

  49. 0 E& e1 Z4 \6 {) h* Q  ~6 x) Z& z' v
  50.     local radius = 转分辨率("12dp")
    : {& C' c0 |  `" q; f4 m

  51. " k' t" \7 A" |+ E$ d: m3 u
  52.     p.setColor(0xffffffff)
      \; O& e5 U' t$ h$ g0 O1 a: F( {

  53. 9 k' z) o- l% l2 \  S$ L+ X# O. m* {
  54.     p.setShadowLayer(25,0,0,0x22000000)5 F6 W1 N. K" P) t
  55. , t" X0 x( L& o9 U3 G; i) b  y; b
  56.     local path=Path();6 e4 Y2 j' c$ j4 A0 Q  y
  57. + l6 I# a& f6 i# Q! z! J
  58.     path.moveTo(0,radius/2);
    / ?+ q* w; j9 k+ K. Y  @% {% q
  59. $ L2 ?, \' |% |7 A% I/ n
  60.     path.arcTo(RectF(0,0,radius,radius),180,90);7 L0 H5 r5 Q5 V" b& I: u

  61. 2 E- m+ w0 w4 L8 M! S* V
  62.     path.lineTo(width-radius,0);
    % u6 m4 N3 |) r1 M& I

  63. ( W2 c' a- Z3 T& `, Z6 S
  64.     path.arcTo(RectF(width-radius,0,width,radius),270,90);0 r& S3 p$ G% [  [8 t5 `

  65. " t7 i7 ~& M  K& T7 }6 _. V
  66.     path.lineTo(width,height-radius/2);
    + t% q  L$ r9 v8 u5 W5 ~$ V4 R
  67. & }" d6 }- `; E( x7 }( Z* e
  68.     path.arcTo(RectF(width-radius,height-radius,width,height),0,90);% u( u: Q5 o. y  F  j+ A
  69. 9 @* a7 y6 |0 a) h; @: ^
  70.     path.lineTo(width*.06,height);8 x- e+ e0 |- O
  71. 9 |/ x8 w* L" a, M! [3 K/ f
  72.     path.lineTo(0,height-width*.06)
    0 O: z9 S5 w9 ?/ V9 u

  73.   B! l% X: e8 `- W5 Z, y
  74.     c.drawPath(path,p);
    6 |$ E. d3 ]+ a  u7 U

  75. % I0 A( J' O3 L
  76.     p.setShadowLayer(15,1,-1,0x22000000)
    ; i3 Y( g3 A9 {; o: C! _
  77. ) J; Q) `+ l# Y5 T! Q! I
  78.     local path2 = Path(). d2 a, f9 ?) A( S$ [5 @0 A; r

  79. ; o7 t$ @) z- K& L
  80.     path2.moveTo(0,height-width*.06)6 }$ ]( \- Q3 ~7 H  l5 N

  81. % p" H; _! ], F7 Z2 s; R: p; [
  82.     path2.lineTo(width*.06-radius/2,height-width*.06);( H* w6 ^" M: k) l

  83. / ]4 Y0 A( A4 U2 _4 G( c( e6 B
  84.     path2.arcTo(RectF(width*.06-radius,height-width*.06,width*.06,height-width*.06+radius),270,90);
    ( Q) B% `. }1 l2 [) F
  85. 9 N* c& ~; r0 b! H! h0 U5 \
  86.     path2.lineTo(width*.06,height)
    , p7 E1 p: m2 n6 x0 L8 B
  87. . \9 e9 z$ X2 o1 b/ x
  88.     c.drawPath(path2,p)
    5 Y8 i4 \3 Z7 `0 @4 L4 d) l& N

  89. ) y: l3 O9 s" `5 H
  90.   end)
    - M0 h5 m; f( `- F( W! `8 B! j
  91. 6 S; U' U' l/ Z5 \  v, a3 e- u, o
  92. end
    8 E+ i# n5 V/ X( n
  93. 0 G, O- X  ^  u2 Z( ]! \4 j

  94. # s4 M' H- i3 C7 Z% y
  95. 3 c+ `& x/ e; G5 n1 p

  96. $ O+ Q$ ]: @, o1 T
  97. 6 w! R# x" B5 k/ s& k
  98. function setTxt(view,view2)
    % H' G; [- E6 t, D! i% s: @
  99.   local txt={"不好意思,我把你弄丢了。",
    . a+ b+ \# y: y4 Z/ W
  100.     "长风破浪会有时,直挂云帆济沧海。",
    1 a, v& {& T- Z0 ~' G
  101.     "你是无意穿堂风,偏偏孤倨引山洪。",
    " Y' E( S2 f3 Q7 D' O
  102.     "愿你天黑有灯,下雨有伞,未来的路有良人相伴。",
    ' O7 `3 b2 I" i# _% Y
  103.     "我有一个梦,也许有一天,灿烂的阳光能照进黑暗森林。",: F4 r5 Z8 [% ?/ N
  104.     "自古美人如名将,不许人间见白头。",
    , w% w/ B% Q1 B0 g: O. Z8 Z- J7 J
  105.     "什么都无法舍弃的人,什么都无法改变。",% H) k6 f- ^0 M
  106.     "天不生我李淳罡,剑道万古长如夜。",
    7 a) ~/ a7 p1 m4 H: F1 p3 F: X- ^
  107.     "斑竹枝,斑竹枝,点点泪痕寄相思。",: z6 T5 d3 k5 x  Y1 e4 W! v4 i
  108.     "一切都会变好,超级好,爆好,无敌好。",
    6 s. y. }) u/ l& u$ L4 b" T8 R
  109.     "把喜欢的一切留在身边,这便是努力的意义。",
    0 K: h$ g, e1 N2 @% ]5 l& ?4 x* u: A
  110.     "悲喜自渡,他人难悟易误。",* d- ^6 }, r2 U) ~8 V2 ~
  111.     "且以深情共白首,愿无岁月可回头"}8 _5 A& i! g3 ~6 n2 C5 V
  112.   import "java.io.File"* c$ U: z- V1 y& O' k1 X, x
  113.   import "android.graphics.Typeface"- T! I) R; y( [; Q" X, Z  O- W
  114. -- local bf=File(activity.getLuaDir().."/hkhbt.ttf");; S6 G9 o  l2 F0 ^" r/ L, e
  115. -- local tf=Typeface.createFromFile(bf)
    - P1 q( K2 U0 ?  m0 P
  116.   view.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);
    5 c  x8 l5 U$ v; k8 \8 W+ G9 O
  117.   view2.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);
      c8 n! j/ H1 V% u
  118.   Http.get("https://v1.hitokoto.cn/?encode=json","utf8",function(code,content,cookie,header)( q" Q& E1 ~# m5 Q
  119.     if code==200 then# I7 ?) f: T" ?1 o
  120.       local cjson=import "cjson"
    0 \7 Q: x) E8 X. t% V1 c
  121.       local json=cjson.decode(content)- u2 Z! W; d) x
  122.       view.setText(json.hitokoto)/ o' k6 c& e$ v- `6 f5 W
  123.       view2.setText("——"..(json.from or "未知作者"))
      W/ n0 S4 H- u
  124.      else
    6 P% K5 P+ i5 \% P$ v1 I- ?" j$ t
  125.       view.setText(txt[math.random(0,12)])! E1 }( J1 N! ]: S) u' i& F
  126.       view2.setText("——没有网络")1 E0 j1 `  {5 Q* Y4 \
  127.     end
    / W; C8 V; ^  v. k
  128.   end)
    ' t8 E4 v: B" n& o
  129. end1 e1 Q2 y1 V$ v5 W4 ~: j9 A

  130. : a5 C0 q  Z' v$ Q: o1 x3 i

  131. - O5 e. t) b0 U" b+ e* e

  132. - F7 k) ^$ C0 S+ t; G+ s" p
  133. . U5 J' J, K# t7 i$ _) {# p
  134. 1 i% k- V1 `& A0 d2 Q3 L
  135. layout={
    ( C! x% r* A: {) m# Z9 Z
  136.   FrameLayout;, ]! u2 a4 M) g4 V$ P
  137.   layout_height="fill";; p1 D; f; b2 [8 [* C! ?
  138.   layout_width="fill";/ o# p4 e7 T0 C. N  D
  139.   clipChildren=false;) H7 ~) H; e  M( y0 T; b! E
  140.   background="#ffffffff";
    3 w, I) {. M: m6 S2 A1 V1 t* u4 N# `
  141.   {7 @: g9 u- ^1 i+ c
  142.     LinearLayout;
    ; p/ j2 a7 U9 H$ k
  143.     layout_height="30%w";5 p5 m2 s2 w4 o  k1 }
  144.     layout_width="90%w";+ p4 Z. u- x. k" c' A8 w8 E  c/ f
  145.     layout_gravity="center";
    / N% [% r/ M, u& c. y6 y# U
  146.     backgroundDrawable=drawTag();% ^! t6 I- T9 X! v& T) E: h
  147.     orientation="vertical";
      i! Y7 i: \) j3 ~" `* Y. U. m
  148.     {% R. h& I# Y% F5 I
  149.       FrameLayout;
    1 i, v3 F3 i( j8 Z* Q% {* w/ w3 F
  150.       layout_height="fill";1 C/ }& Y+ w, @# C9 w
  151.       layout_width="fill";6 S% E7 x8 }9 B8 N+ C/ g7 E
  152.       layout_weight="1";/ }1 Y# E4 F0 T2 \
  153.       {
    4 s' y) V+ e& X
  154.         TextView;2 N/ U+ V$ c2 j! @# c
  155.         id="yiyan_txt";
    , d$ f0 U% B( }! K4 V/ B
  156.         textSize="13dp";) G. X( e6 A/ X7 m' ]& v3 T; c  ]
  157.         textColor="#ff333333";
    4 I( n9 S7 e/ M6 h
  158.         layout_height="fill";" a3 _" H  k+ D6 F
  159.         layout_width="fill";, e' W; J4 h7 B
  160.         layout_margin="15dp";
    , D. |4 `3 O& Q
  161.       }
    " w8 J! c9 o  m% S* B  O
  162.     },
    4 v  b7 @7 K8 G0 I: X
  163.     {; P( k1 s' P* p: J
  164.       TextView;
    ! i: B3 Z% E/ C% {/ O
  165.       id="yiyan_wri";
    1 ~0 \4 n, G* @8 e$ [
  166.       textSize="13dp";
    + `: r5 m2 y2 Q7 x
  167.       textColor="#ff333333";
    4 o. G* W0 m* M. o7 N
  168.       layout_height="wrap";
    % g% v4 L' G/ S# Q1 z+ O" G
  169.       layout_width="fill";1 ^3 L# U3 o8 d4 P$ z* w& k9 `4 A
  170.       layout_marginTop="0dp";
    & J5 {/ }3 Q9 W0 e/ G* }0 E
  171.       layout_marginRight="15dp";
    % R5 }2 q9 Z, q2 t) e, ^3 }/ x
  172.       layout_marginLeft="25dp";) L- V. ?- E+ G  b+ ^9 G
  173.       layout_marginBottom="10dp";2 Q' G% X+ E# ^7 v2 w, ]* p
  174.       gravity="center|right";0 A6 w1 q1 P2 h. w6 _
  175.     }# e( e: \0 R/ d0 h
  176.   }5 c# K$ a$ J7 w! c; }3 p# \
  177. }0 B& Y7 o8 i5 @3 \+ Q8 z
  178. activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题" e) r0 Y. ^- x( q& Q
  179. 3 J4 a2 C5 ]% ^7 U' j1 X
  180. activity.setContentView(loadlayout(layout)). U4 F" g& L, t: S& D
  181. ! _4 e) O6 B) c5 @' T
  182. setTxt(yiyan_txt,yiyan_wri)* J: |* G. D( `9 j7 k

  183. 1 ~' m1 X- z  T! D8 i
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-19 14:18 , Processed in 0.053386 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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