wangy 发表于 2021-7-1 08:41:29

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

require "import"
import "android.app.*"
import "android.os.*"
import "android.widget.*"
import "android.view.*"

import "com.androlua.*"
import "android.graphics.*"


--仿一个木函尺子功能,代码有点乱。
--想做个吸附功能

--各种单位之间转换函数
function dpTopx(sdp)
import "android.util.TypedValue"
dm=this.getResources().getDisplayMetrics()
types={px=0,dp=1,sp=2,pt=3,["in"]=4,mm=5}
n,ty=sdp:match("^(%-?[%.%d]+)(%a%a)$")
return TypedValue.applyDimension(types,tonumber(n),dm)
end



mm=dpTopx("1mm")

activity.setContentView(loadlayout({
FrameLayout,
layout_height="fill";
layout_width="fill";



{
    LinearLayout;
    orientation="vertical";
    layout_height="fill";
    layout_width="fill";
    Gravity="center|top",
    {
      TextView;
      layout_height="300",
      layout_width="fill",
      layout_marginLeft="30",
      id="tv",
    };
},


{
    LinearLayout,
    layout_height="fill",
    layout_width="fill",
    Gravity="center",
    {
      TextView,
      layout_height="300",
      layout_width="300",
      text=tostring(0),
      Gravity="center",
      textColor="#ffffff",
      textSize="60",
      id="tv4",
    },
},



{
    LinearLayout,
    layout_height="fill",
    layout_width="fill",
    Gravity="center",
    {
      TextView,
      layout_height="300",
      layout_width="300",
      text=tostring(0),
      Gravity="center",
      paddingTop="150",
      paddingLeft="150",
      textColor="#ffffff",
      textSize="30",
      id="tv5",
    },
},



{
    LinearLayout,
    orientation="vertical",
    layout_height="fill",
    layout_width="fill",
    id="tv2",
    {
      LinearLayout,
      layout_height="fill",
      layout_width=mm*2,
      Gravity="center",
      layout_marginLeft="30"+mm,
      id="tv3",
      {
      TextView,
      layout_height="fill",
      layout_width="4",
      background="#808080",
      },
    },

},



}))



--横屏模式
activity.setRequestedOrientation(0);







myLuaDrawable=LuaDrawable(function(mCanvas,mPaint,mDrawable)

--画笔属性
mPaint.setColor(0xFF9C9A9D)
mPaint.setAntiAlias(true)
mPaint.setStrokeWidth(2)
mPaint.setStyle(Paint.Style.FILL)
mPaint.setStrokeCap(Paint.Cap.ROUND)
mPaint.setTextSize(28)


MaxPx=mDrawable.getBounds().right-30

MaxMm=math.ceil(MaxPx/100)



--mCanvas.drawColor(0xffffeeaa)




for i=0,MaxMm*10 do

    if i%10==0 then

      mCanvas.drawLine(mm*i+mm,0,mm*i+mm,80,mPaint)


      mCanvas.drawText(tostring(math.modf(i/10)),(mm*i+mm)-mm/2 ,120, mPaint)

   elseif i%5==0 then

      mCanvas.drawLine(mm*i+mm,0,mm*i+mm,60,mPaint)

   else

      mCanvas.drawLine(mm*i+mm,0,mm*i+mm,40,mPaint)

    end

end




end)



--绘制的Drawble设置成控件背景
tv.background=myLuaDrawable





tv2.onTouch=function(v,e)

a=e.getAction()&255

switch a

   case MotionEvent.ACTION_DOWN


   case MotionEvent.ACTION_MOVE

    moveX=e.getX()

    tv3.setTranslationX(moveX)

    --print("≈"..math.floor(moveX/mw).."mm")

    a=math.floor((moveX/mm)/10)

    --向上取整
    tv4.Text=tostring(math.floor((moveX/mm)/10))

    --向上取整
    tv5.Text=tostring(math.floor(moveX/mm)-a*10)


   case MotionEvent.ACTION_UP

end

return true
end





myLuaDrawable2=LuaDrawable(function(mCanvas,mPaint,mDrawable)

--画笔属性
mPaint.setColor(0xFF636562)
mPaint.setAntiAlias(true)
mPaint.setStrokeWidth(20)
mPaint.setStyle(Paint.Style.STROKE)

--mCanvas.drawColor(0xffffeeaa)

mCanvas.drawCircle(150, 150, 100, mPaint);

mPaint.setColor(0xFF9C9A9D)
mPaint.setStyle(Paint.Style.FILL)

mCanvas.drawCircle(150, 150, 90, mPaint);

end)



--绘制的Drawble设置成控件背景
tv4.background=myLuaDrawable2


myLuaDrawable3=LuaDrawable(function(mCanvas,mPaint,mDrawable)

--画笔属性
mPaint.setColor(0xFF434542)
mPaint.setAntiAlias(true)
mPaint.setStrokeWidth(20)
mPaint.setStyle(Paint.Style.FILL)

mCanvas.drawCircle(225, 225, 50, mPaint);

end)

tv5.background=myLuaDrawable3

页: [1]
查看完整版本: 【lua教程】仿一个木函尺子