临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

autojs悬浮窗翻译单词

4月28日 眸中星投稿
  牙叔教程简单易懂效果预览
  如上图所示,一共有三个悬浮存储:右侧的悬浮球十字架悬浮窗翻译的内容悬浮窗
  建议只用两个悬浮窗,也就是把十字架和翻译内容合并为一个悬浮窗,这样用户在触摸移动的时候,
  有更大的触摸区域。
  思路十字架指针确定单词位置用autojs9提供的插件MLKitOCR,识别单词周围的内容ocr识别的结果中,带有文字的recct信息,这些rect信息和十字架的位置对比一下,就知道是哪个单词了网上找了个离线的词典,词汇量几十万用sqlite查询,速度很快
  离线词典制作教程
  请参考:autojs查找相同词根的单词
  https:www。yuque。comyashujsbfug6uwbg0or
  这个是把csv的单词数据转成了db,
  本教程不提供单词数据库,若有需要,下载那个开源的单词库,跟着教程做,自己转db
  多个分辨率保持大致相似的布局
  我们来看看多个分辨率的布局是否一样
  这是模拟器的三种分辨率,可以看到布局几乎一模一样,这是怎么做的呢?
  布局的宽高使用的都是px,按照同样的比例来决定多宽多高,
  文字大小使用的也是他们使用的是同一个比例;letconfig{cross:{widthRatio:0。05,},text:{sizeRatio:0。04,},translationHoveringWindow:{widthRatio:0。4,heightRatio:0。2,},};
  因此,你看到的是同一个比例的布局,但是是不同的宽高,达到了在视觉上保持一致的效果
  悬浮球
  为了尽量少的遮挡用户的屏幕,我们将其透明度设置为了0。5alpha0。5
  悬浮球随意拖动
  他可以随意拖动
  这个拖动因为比较常用,建议大家封装一下;
  我的代码已经写完了,就不改了,这里可以提供一个封装例子
  首先写一个悬浮窗用来测试letwindowfloaty。rawWindow(verticalbuttonidmovetext移动wautohautovertical);setInterval((){},1000);
  然后是封装;
  封装不只是移动,后期可能还要添加各种按下拖动抬起的行为,因此封装的参数对象有多个属性letwindowData{window:window,moveViewId:move,isTouching:false,downCallback:function(){},moveCallback:function(){},upCallback:function(){},onClick:function(){},};
  但是你肯定不想写这么多属性,只有前两个是必须的,其他的可有可无,我们可以设置默认属性,然后和用户传进来的对象合并letwindowData{window:window,moveViewId:move,};letwindowDefaultData{isTouching:false,downCallback:function(){},moveCallback:function(){},upCallback:function(){},onClick:function(){},};Object。assign(windowDefaultData,windowData);
  我们要让用户传入的参数对象覆盖掉默认的对象,因此,用户的参数作为Object。assign第二个参数
  接下来是封装触摸移动;
  第一:做参数校验,如果传递的参数对象没有必备的属性,我们就抛出错误functionmakeWindowMoveable(windowData){if(!windowData。window){thrownewError(windowData。windowisundefined);}if(!windowData。moveViewId){thrownewError(windowData。moveViewIdisundefined);}
  触摸移动的基础封装varx0,y0;记录按键被按下时的悬浮窗位置varwindowX,windowY;记录按键被按下的时间以便判断长按等动作vardownTletviewwindow〔windowData。moveViewId〕;view。setOnTouchListener(function(view,event){switch(event。getAction()){caseevent。ACTIONDOWN:xevent。getRawX();yevent。getRawY();windowXwindow。getX();windowYwindow。getY();caseevent。ACTIONMOVE:移动手指时调整悬浮窗位置window。setPosition(windowX(event。getRawX()x),windowY(event。getRawY()y));caseevent。ACTIONUP:}});
  在该基础上添加各种callbackswitch(event。getAction()){caseevent。ACTIONDOWN:windowDefaultData。downCallback();caseevent。ACTIONMOVE:windowDefaultData。moveCallback();caseevent。ACTIONUP:windowDefaultData。upCallback();}
  再加上点击和长按操作switch(event。getAction()){caseevent。ACTIONUP:letupTimenewDate()。getTime();lettimeupTimedownT移动距离letdistanceMath。sqrt(Math。pow(event。getRawX()x,2)Math。pow(event。getRawY()y,2));if(time150distance5){windowDefaultData。onClick();}elseif(time2000distance5){windowDefaultData。longClick();}}
  完整封装如下letwindowfloaty。rawWindow(verticalbuttonidmovetext移动wautohautovertical);setInterval((){},1000);letwindowData{window:window,moveViewId:move,downCallback:function(){log(downCallback);},moveCallback:function(){log(moveCallback);},upCallback:function(){log(upCallback);},onClick:function(){log(onClick);},longClick:function(){log(longClick);},};makeWindowMoveable(windowData);functionmakeWindowMoveable(windowData){if(!windowData。window){thrownewError(windowData。windowisundefined);}if(!windowData。moveViewId){thrownewError(windowData。moveViewIdisundefined);}letwindowDefaultData{isTouching:false,downCallback:function(){},moveCallback:function(){},upCallback:function(){},onClick:function(){},longClick:function(){},};Object。assign(windowDefaultData,windowData);记录按键被按下时的触摸坐标varx0,y0;记录按键被按下时的悬浮窗位置varwindowX,windowY;记录按键被按下的时间以便判断长按等动作vardownTletviewwindow〔windowData。moveViewId〕;view。setOnTouchListener(function(view,event){switch(event。getAction()){caseevent。ACTIONDOWN:windowDefaultData。isTxevent。getRawX();yevent。getRawY();windowXwindow。getX();windowYwindow。getY();downTimenewDate()。getTime();windowDefaultData。downCallback();caseevent。ACTIONMOVE:移动手指时调整悬浮窗位置window。setPosition(windowX(event。getRawX()x),windowY(event。getRawY()y));windowDefaultData。moveCallback();caseevent。ACTIONUP:windowDefaultData。isTwindowDefaultData。upCallback();letupTimenewDate()。getTime();lettimeupTimedownT移动距离letdistanceMath。sqrt(Math。pow(event。getRawX()x,2)Math。pow(event。getRawY()y,2));if(time150distance5){windowDefaultData。onClick();}elseif(time2000distance5){windowDefaultData。longClick();}}});returnwindowDefaultD}
  这个封装能满足一部分使用需求,在不同的使用场景仍要按需修改悬浮窗吸附屏幕边缘
  拖动以后会自动吸附到屏幕边缘;
  靠近左边就贴到左边;
  靠近右边就贴到右边;
  位置会记住,下次重启代码,悬浮窗还在上次的位置
  上面那个触摸还封装了一个是否正在触摸的属性,为什么要加这个属性呢?
  就是为了这个悬浮窗屏幕吸附效果;
  吸附屏幕边缘,我是用的是定时器,每隔2秒,检查一次
  在我们移动悬浮窗的时候,我们正在调整悬浮窗位置,这个时候,你肯定不想吸附到屏幕边缘;
  不然,他会干扰你调整位置
  为了获取悬浮窗的状态,这个封装方法makeWindowMoveable必须返回windowDefaultDreturnwindowDefaultD
  然后在你需要使用触摸状态的地方,来获取触摸状态:windowDefaultData。isTouching
  屏幕吸附边缘,同样会记忆,使用storage持久化存储
  悬浮窗的实例化
  悬浮窗还有各种隐藏,显示,以及一些其他方法要写,因此建议封装为一个类,这样我们可以更方便的调用各种方法,而不用到处翻页找方法在哪里,
  如果不这样做,那就会越写越烦躁,一会找这个方法,一会找那个方法,烦死了functionCrossWindow(){this。windowfloaty。rawWindow(vertical。。。vertical);this。isSthis。storagestorages。create(crossWindow);}CrossWindow。prototype。getCrossPointfunction(){。。。};CrossWindow。prototype。togglefunction(){。。。};CrossWindow。prototype。hidefunction(){。。。};。。。。。。
  悬浮窗显示和隐藏
  隐藏是将悬浮窗移动到屏幕之外来实现的this。window。setPosition(10000,10000);
  显示就是移动到屏幕之内;
  同样的,悬浮窗的位置也会记忆,也是用storage持久化存储
  十字架
  十字架是一个frame布局,横着一个view,竖着一个view,就成了一个十字架
  当然了,你也可以用图片,或者canvas自己画
  十字架的中心点在屏幕上的位置
  获取一个view在屏幕上的位置信息,我们封装了一个方法functiongetViewRect(view){letlocationOnScreenview。getLocationOnScreen();letframenewandroid。graphics。Rect();view。getHitRect(frame);letwidthframe。width();letheightframe。height();return{x:locationOnScreen〔0〕,y:locationOnScreen〔1〕,width:width,height:height,};}
  获取十字架中心点,就在获取位置信息后,加减乘除,很简单就不说了
  点击翻译按钮,识别单词
  点击翻译按钮后,我们先获取十字架的中心点,然后调用autojs9
  提供的插件MLKitOCR,这个是谷歌开发的工具,识别英文效果又快又好,
  ocr的识别结果带有单词的rect矩形坐标数据,我们和十字架中心点对比,
  谁包含十字架,谁就是十字架指向的单词
  封装的方法是判断一个点,是否在一个rect中functionisPointInRect(point,rect){letxpoint。x;letypoint。y;letx1rect。lety1rect。letx2rect。lety2rect。if(xx1xx2yy1yy2){}}
  翻译单词
  单词库上面已经说过了,我们使用安卓的sqlite来查询单词,命令是db。rawQuery(SELECTFROMTableNameWHEREword?,〔word〕)。single();
  在识别过程中,ocr可能会带上句号,问号,分号之类的标点符号,因此,我们需要替换一下wordwordword。replace(〔:,。〕g,);
  截图
  截图的时候,我们需要把十字架隐藏,我用的方法是把十字架变透明crossWindow。window。cross。attr(alpha,0);sleep(60);ui。post(function(){crossWindow。window。cross。attr(alpha,1);},100);
  不隐藏十字架的会,会被截图,影响识别单词的效果
  ocr的识别区域
  我们这里只讨论正常的英文文章,
  我们假定的是一行最少3个单词,一页最少20行英文单词;letwordRect{ratio:{w:13,h:120,},};
  同样,使用比例来决定图片的宽高
  环境
  设备:小米11pro
  Android版本:12
  雷电模拟器:9。0。17
  Android版本:9
  Autojs版本:9。2。13
  名人名言
  思路是最重要的,其他的百度,bing,stackoverflow,github,安卓文档,autojs文档,最后才是群里问问牙叔教程
  声明
  部分内容来自网络本教程仅用于学习,禁止用于其他用途
投诉 评论

知名汽车越野改装件生产企业,天铭科技率先打开国内前装市场(报告出品方分析师:东莞证券黄秀瑜)1。公司是国内知名的汽车越野改装件生产企业1。1公司简介公司成立于2000年,是国家级高新技术企业。目前拥有现代化生产厂房面积2……文明3。0数字文明(四)游戏从一出现就面临巨大争议,游戏为代表的娱乐领域天然契合人性,但是我们也应正确看待数字时代的游戏问题。例如现在大部分引起争议的游戏几乎是竞技,或者说只是用户单方面参与体验……同是商标侵权,为何华为的商标比小米的更值钱?近日,华为技术有限公司(以下简称华为)诉深圳市尚派科技有限公司(以下简称尚派公司)侵犯商标权一案宣判,法院支持了华为提出的惩罚性赔偿诉讼请求,判令尚派公司赔偿华为500万元人民……打开米兰科维奇旋回分析方法黑匣子宋翠玉,张之辉宋翠玉:山东科技大学讲师张之辉:山东科技大学博士后地球自转及绕太阳公转的轨道参数(偏心率、斜率和岁差)不是一成不变的,而是发生准周期性变化,例如……ECCV2022FPN错位对齐,实现高效半监督目标检测(Ps作者丨GangLi知乎(已授权)来源丨https:zhuanlan。zhihu。comp544346080编辑丨极市平台论文链接:https:arxiv。or……为生命一搏!两名胎儿腹中先天畸形,家人不放弃重获新生华声在线全媒体记者李琪实习生孙昕通讯员李雅雯阳惠8月10日,湖南省儿童医院,出生仅13天的童童安静地吸着奶,胸口轻微起伏。好顽强的生命力。在妈妈肚子里时,童童被检查……维生素缺乏症一览表,看看自己缺哪种,不妨了解一下,建议收藏维生素是人体不可缺少的一种营养物质,而维生素的种类非常多,有13种,其中每一种都不能缺少,当缺乏其中一种之后,身体就会出现一些异常表现。比如在换季的时候,出现口腔溃疡,牙……马健评男篮最强阵容,孙悦巴特无缘,球迷放在NBA能打进季后赛最近马健评选了自己心目中中国男篮最佳阵容,中锋这个位置肯定是姚明,大前锋这个位置是王治郅或者易建联,小前锋这个位置朱芳雨,分卫位置是胡卫东,控卫这个位置是郭艾伦,对于这个阵容,……一次久违的远行试驾捷途X70PLUS去年一直想出门自驾一趟,可惜媒体工作的繁忙实在是抽不开身,好不容易可以喘息了想去哪儿都还去不成;甚至,我一直认为自己被针对,有几次都安排好时间去西昌了,结果高速公路还遭了天灾。……2022中国现代生态发展指数70。1水污染成最大担忧中国小康网独家专稿文《小康》中国小康网记者刘彦华本年度,水污染首次击败空气污染,以42。5的得票率登上严重威胁公众的污染种类排行榜的榜首。在GDP增量全国第一……绽放张嘉倪张嘉倪2022年《时尚先生fine》一月刊封面造型真不错。短发,看起来很利落,复古,迷幻,酷极了。摄影师是邵迪。张嘉倪张嘉倪想当年还看过《寻找紫菱……autojs悬浮窗翻译单词牙叔教程简单易懂效果预览如上图所示,一共有三个悬浮存储:右侧的悬浮球十字架悬浮窗翻译的内容悬浮窗建议只用两个悬浮窗,也就是把十字架和翻译内容合并为一个悬浮窗,这样用……
化解校园暴力面对校园暴力依然保持成长前情回顾:前文浅谈从积极意义上面理解影响我们成长的因素,本文探讨应对校园暴力应该有的正确态度,期待同学在遇到问题时能够化解矛盾,让克服困难的经历成为自己的成长财富。1。在……谭龙谈东亚杯希望自己至少进一球,能破日韩球门能荣耀一辈子直播吧7月15日讯7月15日晚,中国男足选拔队在青岛市天泰体育场进行了新一期集训的第2次室外训练。据北青体育报道,谭龙、蒋光太、朱辰杰、戴伟浚4名球员回归球队并参加了本次合练。……NAS可以摆脱网线了!极空间Q2图赏8月8日,极空间发布了主打家居生活方向的全新Q2系列双盘位NAS,首款产品定名极空间Q2,售价1599元。现在这款新品已经来到我们评测室,下面为大家带来图赏。Q2定……大衣哥前儿媳被全网封禁,她是怎么把一手好牌打烂的?陈亚男的不知足和不自量力把一手好牌打烂了,她自认为自己的翅膀硬了,可以单飞,开始对朱家人各种嫌弃,开始对自己的身份各种洗白,一系列操作把自己幸福生活葬送掉了。一、不应该公……7位勇闯好莱坞的女星,有人当花瓶,有人靠实力给中国人长脸在演艺圈打拼的演员,没有哪个是不想迈进好莱坞大门的,好莱坞一度成为演员们的梦想。中国的女演员里也不乏勇闯好莱坞的,她们中有人有演技有实力,凭借着自己的努力给中国人长脸,而有人就……重罚黑哨裁判!中国女篮惨负日本女篮,遭遇不公平吹罚,罚球016月21日,2022年安特卫普三人篮球世界杯正式开打,在首个比赛日咱们中国三人篮球女篮率先出战,不过首个比赛日女篮姑娘们喜忧参半。21日晚上6点50分,中国女篮对阵罗马尼……超快充全智能,小鹏G9制定豪华智能SUV新标准视频加载中。。。从首款车型G3到P7,小鹏建立起智驾能力的技术壁垒;再从P7到P5,小鹏实现了智能空间的从无到有。凭借在智能汽车技术积淀的优势,小鹏汽车毫无意外的摘得20……英特尔在中国被骂惨,印度顺势要接盘,高调发邀请,砸百亿搞芯片文闲田不久前,拜登签署了一项反华法案,禁止美企进口新疆产品。法令一出,一批美国企业就冒头了,英特尔、沃尔玛与山姆等遭到了中国网友的谴责与抵制。在此之际,印度却高调向英特尔……意甲开战在即!简略检视20队组队备战情况意甲今日开战,卫冕冠军米兰将迎战乌迪内斯揭开战幕战,同时间开赛还有桑普多利亚对亚特兰大。各队如箭在弦上迎来开幕战前,黑猫先来简略检视20队组队备战情况及今季展望。从不敌瓦……炉石传说新版本明日上线,上线前有几点需要注意炉石传说新版本纳斯利亚堡的悬案将于明日(8月3日)上线。新版本上线前有几点需要注意,他能让你在新版本获得更高的收益。他们分别为一、竞技场卡池轮换白嫖。二、德纳修斯大帝、摩……智能家居都需要买什么设备在这个互联网极速发展的时代,智能化、开放性、网络化、信息化已逐渐成为未来智能家居的主要趋势。智能家居不仅起到低碳环保的作用,在很大程度上也改善了人们的生活习惯,同时让人们的日常……iPhone15全系叹号屏引热议网友吐槽显示内容几乎不变从目前多方消息来看,iPhone14Pro两款新机取消刘海屏已经基本板上钉钉,将更换为类似感叹号的挖孔屏,这是苹果五年来首次大改正面设计。不过,iPhone14标准版由于阉割的……

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找