大家好啊!今天给大家分享一个幻想编辑器代码手势。

5 大帅哥隋昊航 11小时前 54次点击

此代码由隋昊航本人亲手制作。

隋昊航自己给自己赞助播出。

这个呢,代码是这样的,我的手是这样的,左右滑动可以切换上一项和下一项。

然后呢?单指上滑确定,单指下滑返回。

然后修改了一系列的 bug。

下面请看正文。

require "import"

import "android.widget.*"

import "android.view.*"

function 取触摸动作(e)

return e.getAction()

end

function 取关联按键(e)

return e.getActionButton()

end

function 取触摸点ID(e,i)

return e.getPointerId(i)

end

function 取坐标(e,i)

return e.getX(i),e.getY(i)

end

function 取工具类型(e,i)

return e.getToolType(i)

end

function 取外接按键状态(e)

return e.getButtonState()

end

function 取触摸分类(e)

return e.getClassification()

end

function 取辅助键状态(e)

return e.getMetaState()

end

function 取系统标志(e)

return e.getFlags()

end

function 取边缘标志(e)

return e.getEdgeFlags()

end

function 取触摸点数量(e)

return e.getPointerCount()

end

function 取历史事件数(e)

return e.getHistorySize()

end

function 取事件时间(e)

return e.getEventTime()

end

function 取按下时间(e)

return e.getDownTime()

end

function 取设备ID(e)

return e.getDeviceId()

end

function 取事件来源(e)

return e.getSource()

end

function 取屏幕ID(e)

return e.getDisplayId()

end

--vv:要挂载触摸的view控件

--func回调表:

-- 左=选中上一项,右=选中下一项,上=确定,下=取消

-- 上2,下2,左2,右2 双指;上3,下3,左3,右3 三指

function 初始化(vv,func)

func=func or {

上=function()end,

下=function()end,

左=function()end,

右=function()end,

上2=function()end,

下2=function()end,

左2=function()end,

右2=function()end,

上3=function()end,

下3=function()end,

左3=function()end,

右3=function()end

}

local 上=func["上"] --单指上滑:确定

local 下=func["下"] --单指下滑:取消

local 左=func["左"] --单指左滑:上一个项目

local 右=func["右"] --单指右滑:下一个项目

local 上2=func["上2"]

local 下2=func["下2"]

local 左2=func["左2"]

local 右2=func["右2"]

local 上3=func["上3"]

local 下3=func["下3"]

local 左3=func["左3"]

local 右3=func["右3"]

local 灵敏度=45

local 冷却=200

local 状态=1 --1允许触发,0冷却锁定

local 数据={}

for i=0,9 do

data["cx"..i]=0

data["cy"..i]=0

data["x"..i]=0

data["y"..i]=0

end

--修复:局部状态锁

local function 状态锁()

if 状态==1 then

状态=0

task(冷却,function()

if 状态==0 then

状态=1

end

end)

end

end

--修复:计算方向内置,能访问灵敏度,补齐全部角度条件

local function 计算方向(bx,by,滑动阈值)

滑动阈值=滑动阈值 or 灵敏度

local 横向偏移有效=math.abs(bx)>=滑动阈值

local 纵向偏移有效=math.abs(by)>=滑动阈值

if not 横向偏移有效 and not 纵向偏移有效 then

return false

end

local 角度=math.deg(math.atan2(by,bx))

if 角度 > -45 and 角度 <= 45 then

return 1 --右

elseif 角度 > 45 and 角度 <=135 then

return 2 --下

elseif 角度 >135 or 角度 <= -135 then

return -1 --左

else

return 0 --上

end

end

vv.onTouch=function(k,v)

local 动作=取触摸动作(v)

local 点=取触摸点数量(v)

--按下,记录各个触点原始坐标

for i=0,点-1 do

if 数据["cx"..i]==0 and 数据["cy"..i]==0 then

数据["cx"..i],数据["cy"..i]=取坐标(v,i)

end

end

--手指全部抬起,清空全部触点,恢复状态

if 动作==1 then

for i=0,9 do

数据["cx"..i]=0

数据["cy"..i]=0

数据["x"..i]=0

数据["y"..i]=0

end

状态=1

return true

end

--更新实时触点坐标

for i=0,点-1 do

数据["x"..i],数据["y"..i]=取坐标(v,i)

end

-- =========单指手势:你的界面交互逻辑=========

if 动作==2 and 点==1 and 状态==1 then

local dir=计算方向(数据.x0-数据.cx0,数据.y0-数据.cy0)

if dir==0 then

状态锁()

上() --上滑=确定

elseif dir==2 then

状态锁()

下() --下滑=取消

elseif dir==-1 then

状态锁()

左() --左滑,上一项

elseif dir==1 then

状态锁()

右() --右滑,下一项

end

end

-- =========双指手势,全部加状态锁,修复旧bug=========

if 动作==2 and 点==2 and 状态==1 then

local d0=计算方向(数据.x0-数据.cx0,数据.y0-数据.cy0)

local d1=计算方向(数据.x1-数据.cx1,数据.y1-数据.cy1)

if d0==-1 and d1==-1 then

状态锁()

左2()

elseif d0==1 and d1==1 then

状态锁()

右2()

elseif d0==0 and d1==0 then

状态锁()

上2()

elseif d0==2 and d1==2 then

状态锁()

下2()

end

end

-- =========三指手势,全部加状态锁=========

if 动作==2 and 点==3 and 状态==1 then

local d0=计算方向(数据.x0-数据.cx0,数据.y0-数据.cy0)

local d1=计算方向(数据.x1-数据.cx1,数据.y1-数据.cy1)

local d2=计算方向(数据.x2-数据.cx2,数据.y2-数据.cy2)

if d0==0 and d1==0 and d2==0 then

状态锁()

上3()

elseif d0==2 and d1==2 and d2==2 then

状态锁()

下3()

elseif d0==-1 and d1==-1 and d2==-1 then

状态锁()

左3()

elseif d0==1 and d1==1 and d2==1 then

状态锁()

右3()

end

end

return true

end

end

--===============调用示例================

-- local 视图=LinearLayout(context)

-- 初始化(视图,{

-- 左=function() print("上一个项目") end,

-- 右=function() print("下一个项目") end,

-- 上=function() print("确定") end,

-- 下=function() print("取消") end,

-- 上2=function() print("双指上滑")end,

-- 下2=function() print("双指下滑")end,

-- 左2=function() print("双指左滑")end,

-- 右2=function() print("双指右滑")end,

-- 上3=function() print("三指上滑")end,

-- 下3=function() print("三指下滑")end,

-- 左3=function() print("三指左滑")end,

-- 右3=function() print("三指右滑")end

-- })

共 1 条评论
调皮的熊二 10小时前

不会看不懂,不会写代码。