autojs如何实现长按弹窗菜单功能


本篇内容主要讲解“autojs如何实现长按弹窗菜单功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“autojs如何实现长按弹窗菜单功能”吧!由粗到细, 自顶向下的写代码我们现在要修改的文件是showMenuWindow.js我们先修改xml, QQ的弹窗由两部分组成菜单列表箭头因此, xml如下这给菜单我们用的也是recyclerView, 因此先设置他的adapter, 如果不会就看上一节课程;设置Adapter的时候, 第一个参数我们是有的, 第二个参数是adapter要绑定的数据, 现在没有;这给菜单数据应该有哪些属性呢?菜单显示的文字菜单点后的回调函数因此, 数据大概是这样的这种可配置的数据, 我们把它放到config.js中.数据有了, 接下来我们进入setPopMenuRecyclerViewAdapter方法内部,setPopMenuRecyclerViewAdapter.js基本上就是复制黏贴, 修改一下类名即可PopMenuRecyclerViewAdapter.js中, 修改一下holderXml即可PopMenuRecyclerViewViewHolder.js, bind需要修改除了设置adapter, 菜单弹框还需要设置layoutManager, 这样我们可以控制水平方向上菜单的数量先设置layoutManager, 再设置adapterPopMenuRecyclerViewViewHolder.js, 需要修改一下bind方法, 他的item是对象, 文本是item.name运行代码, 看看效果菜单出来了, 接着写箭头, 菜单的xml是下面那个View就是我们放箭头的地方箭头可能指向上方, 也可能指向下方, 我们通过设置View的前景, 来展示箭头这里我们要写自己的drawable, 因此, 要继承重写他的draw方法画笔创建一支就好, 因为没有发现要创建多支画笔的需求, 以后需要再改, 满足当下即可;path肯定够是变的, 因为箭头有上下两个位置;那么在这个TriangleDrawable类中, 我们要实现那些东西呢?设置箭头方向 setDirection目前想不到别的了假设列表有ABC三条数据, ABC依次排列, 在A的顶部, 如果有控件继续放置一条数据D的话,那么我们就把弹框菜单放到A的顶部, 如果没有, 就放到A的底部怎么判断是否有足够的空间放下D数据呢? 和那些东西有关?被长按的view的顶部坐标弹框菜单的高度有这两个信息, 我们就可以判断箭头的方向了.为了判断箭头方向, 我们新建一个文件, getArrowDirection.js, 文件夹名popMenuRecyclerView, 和箭头明显不合适, 因此我们新建文件夹popMenuArrow被长按的view的顶部坐标弹框菜单的高度, 因为弹框还没有显示出来, 所以我们要预先测量他的高度判断箭头指向我们给箭头一个背景色, 先看当前的效果可以看到箭头上下的效果已经出来了,箭头View的挪动使用了addView和removeView这里有个问题, 箭头的背景色为什么那么长, 是弹框菜单的两倍多.这是因为GridLayoutManager第二个参数设置了5, 我们改为Math.min, 取最小值, 宽度问题就符合预期了如果弹框菜单在长按控件的上方, 那么应该偏移多少?Y轴偏移量 = 弹框菜单的高度 + 长按控件的高度我们新建一个文件 popMenuCalculateOffset.js获取高宽高以后, 我们的代码写了不少了, 看看效果, 及时排查bug箭头朝上箭头朝下我们用canvas画个三角形, 首先我们要继承类, 重写他的draw方法单独写一个类文件 TriangleDrawable.js, 放到文件夹 popMenuArrow;绘制箭头之前, 要知道箭头的宽高, 和箭头的中点;箭头的宽高, 我们就用arrowView的高度;箭头的中点, 我们指向被长按的控件 X 轴的中心为了使类, 尽可能的比较纯, 我们传递的参数选择具体的数值, 而不是控件;这里的纯指的是没有副作用, 以及可复用的程度在popupWindow出现之前, 我们要把箭头绘制出来,使用onPreDraw, 在绘制之前, 我们可以获取到正确的宽高代码写了不少了, 先测试一下效果箭头朝上箭头朝下颜色这个就不多说了, 非常容易修改, 说下圆角修改圆角是在这个文件中: showMenuWindow.js, 我们要给RecyclerView包裹一层card也就是给弹框菜单中的recyclerview添加点击事件增加点击事件所在的文件是 popMenuRecyclerView/PopMenuRecyclerViewAdapter.js,我们修改他的onCreateViewHolder点击事件生效了, 还有个问题, 点击了之后,弹框菜单没有消失, 我们在这里又引用不到弹框实例, 怎么弄?我们可以用全局对象, 挂载弹框的实例;我们不选怎全局对象, 而是去能引用的地方引用实例;在 showMenuWindow.js 这个文件中, 出现了popupWindow实例, 我们把这个实例作为参数, 传递给setPopMenuRecyclerViewAdaptersetPopMenuRecyclerViewAdapter.js我们在这个文件中给adapter设置了点击事件, 相应的要在 PopMenuRecyclerV免费云主机域名iewAdapter.js 文件中添加方法,setClick如果要增加多个菜单, 在config.js中修改配置即可到此,相信大家对“autojs如何实现长按弹窗菜单功能”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: 怎么用vue获取地址栏的参数

本篇内容介绍了“怎么用vue获取地址栏的参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.使用params方式获取地址栏参数export default n…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/08 16:29
下一篇 03/08 16:49

相关推荐