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

登录  | 立即注册

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

查看: 1313|回复: 0

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

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-7-1 08:38:03 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"& w- H# N, V2 c7 }  T7 r5 s1 N2 u
  2. import "android.app.*"
    3 Q8 L* w  G. F1 \! O
  3. import "android.os.*"4 B4 E5 E3 a2 t. q
  4. import "android.widget.*"
    4 S4 K. m7 S" M; z
  5. import "android.view.*"2 Y8 Z5 y% ]4 A
  6. --分辨率转换函数
    4 ~/ |% S0 N' j2 e% ^" ?
  7. function 转分辨率(sdp)
    6 [& ?. b9 ^3 z# ?
  8.   --导入所需类
    + F% Y$ Q& G/ T" s& T, P) n: c" N. a
  9.   import "android.util.TypedValue"
    * x8 k; a( K( O4 b
  10. # g( z& V: M) N7 z& J* g7 _6 e
  11.   local dm=this.getResources().getDisplayMetrics()
    9 P; B, W. _# w1 H% Y( \6 C# _

  12. 1 A4 `/ y7 T& b+ N
  13.   local types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}
    6 ]( U% M5 o9 ~! `( p8 g  _

  14. 4 o  M, V0 J* f7 b6 X
  15.   local n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")8 t, V3 u( O+ j% s) u8 r

  16. ) u) M  X+ p4 y0 `% K1 V' h
  17.   return TypedValue.applyDimension(types[ty],tonumber(n),dm)2 E. N/ D; J+ M* w8 ?

  18. 6 e# n7 z/ s% l! }. E
  19. end
    : u/ x* s/ i1 F

  20. 6 a4 f! S" ]3 P. K( ^$ l! c7 y
  21.   l# m3 s1 Y- w2 m+ s# f
  22. function drawTag()# o( `1 m! K% E! K4 F
  23. 4 O. \& K" g5 X. a6 x& s9 w# S
  24.   import "android.graphics.RectF"
    * P. @) d- N( X! g: E
  25. / F0 o. K# ^! t) w3 r" S* d
  26.   import "android.graphics.Point"
    5 X6 D& S8 P* M) w* i

  27. ! j2 U2 W" B- L
  28.   import "android.graphics.Paint"0 b7 Z. v0 m8 ~( x5 F
  29. 1 y1 J4 L$ S; C2 D; t
  30.   import "android.graphics.Path"
    ( o) m4 u4 {+ A: `' `& W# M: Q

  31. , P  O4 o# v+ b1 s
  32.   import "android.graphics.Color"
    " |. I. ]% v8 M# a6 E+ A

  33. 2 z4 Y. Y- ^: ?1 F& o: y7 A; u
  34.   return LuaDrawable(function(c,p,d)
    7 u* K" {4 p* H4 J5 C
  35. 8 u- z6 i% \$ q8 i* A* Z3 O. k
  36.     c.drawColor(0x00000000)
    9 G# G& x+ b& X6 P) q

  37. . y" m! o- u$ L0 F$ J
  38.     p.setAntiAlias(true);+ w* V0 N6 W9 |, l1 G/ U' F

  39. # f% n9 n' s1 ]5 y7 J2 S) J
  40.     p.setStrokeWidth(20);/ \: j! e/ Q9 p1 j' h0 \
  41. ! x% F3 y, k" v, w/ K) b2 x
  42.     p.setStyle(Paint.Style.FILL);3 t8 L9 W& D. G. `( u% R" `
  43. ! p6 u1 a: k5 Q8 |
  44.     local quYu=d.bounds9 N) x+ F, n% n. f1 ~

  45.   M5 W* X! U5 N- Q" m# |( w
  46.     local width=quYu.right
    + J. j7 E" t' W& B5 b2 y6 K

  47. 0 n# u6 a2 q; j2 x: ]7 F, d: Z
  48.     local height=quYu.bottom  J" D4 w: b  P9 C9 V6 z4 h

  49. 6 u, k, J% Y( ~" K+ @, A
  50.     local radius = 转分辨率("12dp")" R' r% l% {% b' ]6 Z% a5 B

  51. 6 F  Y, G: l3 S; V. ^
  52.     p.setColor(0xffffffff)
    9 A9 J* w, C/ B8 @% i

  53. $ O3 ?& {5 w- `: I. N5 V
  54.     p.setShadowLayer(25,0,0,0x22000000)
    & k, r4 m/ U2 G: w4 z3 O

  55. 7 l$ [# l4 g! F& ^+ H$ @2 p( m
  56.     local path=Path();/ j& \$ R, R3 Y6 H/ Z8 m2 k7 I
  57. , h) b$ w* k2 f" z, u- e2 x, m) k
  58.     path.moveTo(0,radius/2);  t" t5 ~* S) I8 r+ r' `

  59. : v7 R2 }2 m, Z
  60.     path.arcTo(RectF(0,0,radius,radius),180,90);
    7 C7 {7 c2 N# ]6 l, v$ K% W

  61. ' w# D6 C6 |/ X, M' _
  62.     path.lineTo(width-radius,0);
    6 Q3 l! r4 }5 E# W

  63. 7 f( |) ~1 V1 }# K2 Q' Z
  64.     path.arcTo(RectF(width-radius,0,width,radius),270,90);$ `  B, k- t  E$ O& Z
  65. 8 w8 L  N, B3 y+ w$ d# |
  66.     path.lineTo(width,height-radius/2);
    7 x1 X# m4 t% r

  67. 9 i/ n2 ^& B3 I# _; b: U
  68.     path.arcTo(RectF(width-radius,height-radius,width,height),0,90);9 R( Z9 K4 e6 z; m

  69. 1 v0 M, r$ O( m4 [8 l! t4 E& M
  70.     path.lineTo(width*.06,height);
    + x8 k; L6 u. r- \: o% t  s
  71. 8 P' @! m4 N* p+ H' F5 k6 H. G, O$ Y
  72.     path.lineTo(0,height-width*.06); W/ }' ~7 x6 w2 T
  73. + s2 p& a8 t1 b: G/ b9 w# \, @4 x4 J
  74.     c.drawPath(path,p);% U8 A% V4 c; B4 x. x: i& @
  75. 5 n  i% j7 C# m
  76.     p.setShadowLayer(15,1,-1,0x22000000)* b0 X) y. Y* x( Q
  77. 0 E* a/ ]- K& S7 T2 @3 G
  78.     local path2 = Path()
    . I' @! M% i$ A1 e

  79. $ ]8 Z6 `& L9 n; ^; H. S0 |7 a' l
  80.     path2.moveTo(0,height-width*.06); L  J& ]6 _3 A& s0 ^

  81. / G! G* X3 L/ H! q+ [* a
  82.     path2.lineTo(width*.06-radius/2,height-width*.06);
    * t+ C4 [  K6 n
  83. / D2 m' _+ D1 L1 M
  84.     path2.arcTo(RectF(width*.06-radius,height-width*.06,width*.06,height-width*.06+radius),270,90);2 _& e9 q" g* ^. q) ~; j0 Z
  85. 6 U! y$ ]# K" v5 D9 A4 B& y
  86.     path2.lineTo(width*.06,height)
      F5 Y0 m) {6 S$ u2 `  O1 K
  87. $ y9 e! l2 B0 C1 P' S! k
  88.     c.drawPath(path2,p)
    3 _' J9 `  T, J4 t- |

  89. 5 U9 E1 t8 H4 D  n+ s. q. N/ n
  90.   end)
    ) |9 G" d+ d2 t4 q$ h

  91. ( Z4 I; m2 F" `- \3 J1 {* S+ d4 H
  92. end9 S, |% d+ C  g' d
  93. ' Z  t' y1 ^- `% _# q

  94. 2 Y8 \$ O- g9 _9 _* I- Z1 O
  95. 7 ^( K1 j* z3 ~8 Y) m4 L

  96. 0 k( Z% \( X; ?& N- M3 @

  97. 2 u, w2 ^; C& `$ K/ `* Q
  98. function setTxt(view,view2)
    4 l% v0 g& s& y: `) i
  99.   local txt={"不好意思,我把你弄丢了。",: ?# J2 D: s* |6 I' L+ F
  100.     "长风破浪会有时,直挂云帆济沧海。",
    " t: t3 U" H$ _; A& F( B
  101.     "你是无意穿堂风,偏偏孤倨引山洪。",
    ( [3 ~! n% ^! Y, [
  102.     "愿你天黑有灯,下雨有伞,未来的路有良人相伴。",  M1 U7 O% U' K$ o! \+ [
  103.     "我有一个梦,也许有一天,灿烂的阳光能照进黑暗森林。",/ v' L! @. @: E$ _5 f
  104.     "自古美人如名将,不许人间见白头。",
    % v# s* [" R( G6 ^+ x% o& d, T
  105.     "什么都无法舍弃的人,什么都无法改变。",
    ( D7 k8 a5 a# s" m& s; ]
  106.     "天不生我李淳罡,剑道万古长如夜。",  u: @1 K# M6 |" V
  107.     "斑竹枝,斑竹枝,点点泪痕寄相思。",& z& M+ S  B& o( x  z
  108.     "一切都会变好,超级好,爆好,无敌好。",
    - h4 N( j7 N/ s" R2 }
  109.     "把喜欢的一切留在身边,这便是努力的意义。",
    2 R. o& F0 z6 }6 y' }
  110.     "悲喜自渡,他人难悟易误。",
    ) o5 w  `1 ~8 p8 m. z( w
  111.     "且以深情共白首,愿无岁月可回头"}! A6 _3 E  @6 j% Q# p/ ?! S: D- p
  112.   import "java.io.File"3 [$ v- f* `& z: ]( g2 }
  113.   import "android.graphics.Typeface"
    8 w, C9 v6 G! I  S+ I; X+ ?
  114. -- local bf=File(activity.getLuaDir().."/hkhbt.ttf");* }: M, G6 H# z0 k
  115. -- local tf=Typeface.createFromFile(bf)
    $ H5 `2 y  p9 T& m
  116.   view.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);
    ; _) h! p' O! C0 f: T6 m
  117.   view2.setTypeface(tf).setLineSpacing(1.6,1.6).setLetterSpacing(0.13);) n0 h# h2 R0 ~5 a  q  p+ Q7 T
  118.   Http.get("https://v1.hitokoto.cn/?encode=json","utf8",function(code,content,cookie,header)
    / |) F/ V4 ?7 K; f& b& ]' j8 S
  119.     if code==200 then1 f6 `7 ?- E# q; w( Q' I
  120.       local cjson=import "cjson"$ t) p' L4 x0 e8 \3 a8 I
  121.       local json=cjson.decode(content)
    6 o$ S( |3 @2 D$ c* V) }) E
  122.       view.setText(json.hitokoto)
    3 i, T, g7 B/ A1 w6 i& A% {) b: A
  123.       view2.setText("——"..(json.from or "未知作者"))* a# U& I; j% X4 o7 `1 c( I
  124.      else( E0 K( Q! d$ q) X
  125.       view.setText(txt[math.random(0,12)])* ~; Y; ]0 v% `7 ]! e
  126.       view2.setText("——没有网络")
    # U9 b4 k. y# e2 X% M: k
  127.     end
    " x7 r, W3 x  }7 f
  128.   end)0 ]; s1 {" P+ O
  129. end
    ! Y- s) P# U; s+ w0 b
  130. 5 v* e5 Y) ]! d

  131. , b# b* G4 ]4 C, h3 q7 ^6 U

  132. 3 S! X5 E/ C9 ?# @" v7 O7 o) u3 h
  133. # v4 o8 N: l2 ^# v3 ^. p
  134. 2 o: }# ~9 q" F
  135. layout={$ t! p) ]7 O' q/ j
  136.   FrameLayout;, z+ P5 P, `* r' y. G! V
  137.   layout_height="fill";5 _& L) |- V# X- l% m' }  P
  138.   layout_width="fill";6 }, D- z5 m3 s$ W2 R8 Q6 ~4 B
  139.   clipChildren=false;& d1 J+ W. u% i
  140.   background="#ffffffff";
    . ^" Y6 F* W1 z0 D2 Z, q1 X1 w9 u' P* a
  141.   {
    " O, y0 ]! w9 B  b
  142.     LinearLayout;
    4 G; _5 f+ O4 ]/ w9 {# W$ u
  143.     layout_height="30%w";
    8 |/ B* K+ R$ ?4 x6 i+ H: J+ n
  144.     layout_width="90%w";% ^( L& V6 z/ x0 o
  145.     layout_gravity="center";& n8 g4 [0 K. E$ E: Y. a
  146.     backgroundDrawable=drawTag();
    7 J2 U( ~0 `: R* q
  147.     orientation="vertical";
    . o$ h- q6 A, i8 P/ l
  148.     {
    6 Y+ ^2 C9 z- ?0 J, {) b) h+ W
  149.       FrameLayout;7 H0 j0 l1 T3 C
  150.       layout_height="fill";
    6 d; x' _/ `  D7 ?# Z
  151.       layout_width="fill";2 A) t, j! U* f& ?5 f  V
  152.       layout_weight="1";
      G- p/ A* F9 u
  153.       {7 x, p+ |+ A. }: F, h7 u( s$ L
  154.         TextView;$ v$ [- J: R+ k* A
  155.         id="yiyan_txt";
    : \* a3 w3 S* a/ S/ {; M9 ?. X  |
  156.         textSize="13dp";
    1 L0 r* Y& g0 s1 C" _+ C+ B2 B# f
  157.         textColor="#ff333333";% Q& X. o6 q9 F* n8 V# x) `
  158.         layout_height="fill";) a0 L5 ]' N! X0 U4 j1 w. |
  159.         layout_width="fill";
    ) l7 k# `: Z* s: ]2 q
  160.         layout_margin="15dp";
    2 A4 u4 W9 |4 N: w9 Z$ V  q4 X6 e2 \7 e
  161.       }1 d: i# l* m) I2 }) p
  162.     },
    3 p9 c, T8 y% O3 w3 b: s% o
  163.     {
      [9 P7 N  F  b$ d& ]0 b
  164.       TextView;
    . Z! f& [+ v- S* Y9 Z
  165.       id="yiyan_wri";
    6 G5 y5 K4 R& B" ^
  166.       textSize="13dp";, ^1 I, }' J8 r* `9 a% [/ H! n
  167.       textColor="#ff333333";
    + ^  n& B( `( l- }: X) z
  168.       layout_height="wrap";# Z7 k7 k8 |% w. ~& M% b4 z
  169.       layout_width="fill";
    & a- _4 I( W: ?2 F* n4 j
  170.       layout_marginTop="0dp";  H& a: e5 C; I2 Q8 N  _1 R
  171.       layout_marginRight="15dp";
    6 T, I: }1 w# ]$ y5 Z' L
  172.       layout_marginLeft="25dp";- R: s" T$ L. s9 b
  173.       layout_marginBottom="10dp";
    0 [' o, d9 I% m3 C
  174.       gravity="center|right";
    9 o7 B8 I8 ?+ B' @
  175.     }7 |' m9 R" Q( l! W& J( Y- }
  176.   }
    - ^: \9 S. z6 r
  177. }
      o6 }9 L5 D8 R3 v. h: G
  178. activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题- h8 P6 `5 _; P3 Z, ^1 T. |

  179. & z+ d5 U/ e1 Z) O0 O6 [
  180. activity.setContentView(loadlayout(layout))
    ! T4 @( h: ]# H6 c$ i5 e! c
  181. ( p% k/ I) i2 [9 o5 S: V
  182. setTxt(yiyan_txt,yiyan_wri)
    # z/ m* v- u( D' G, n
  183. % h4 V5 D# }9 Z  P
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-17 04:53 , Processed in 0.052843 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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