蹭一波热度:记微信跳一跳辅助线开发

  • 场景
    前两天下午三点多时候,老板突然一个电话过来:“那个小甘啊,最近微信跳一跳小游戏很火啊,我们现在已经有了全自动脚本了,现在需要一个提升用户参与感的辅助工具,就是需要一条辅助线来帮助用户得到更高分,这个东西你来做一下,务必用最短的时间把它实现了。”唉,那么没办法只能开撸了。

  • 基本思路
    既然是辅助线,那么肯定是在所有窗口的前面,看到这个自然就想到了利用WindowManager来实现一个悬浮在所有窗口前面的Window,利用Service在后台不断更新小人头部的坐标,通过监听手指按下和弹起不断在Window中addView和removeView来绘制辅助线。Tips:监听手指在屏幕上的事件和不断寻找小人头部坐标是Native以前实现好的成熟方案=。=这里我并不会。

  • 编码实现
    1.Service关键代码
    创建没有事件的悬浮窗

private void createToucher() {//赋值WindowManager&LayoutParam.params = new WindowManager.LayoutParams();windowManager = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);//设置type.系统提示型窗口,一般都在应用程序窗口之上.params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;//设置效果为背景透明.params.format = PixelFormat.RGBA_8888;//设置flags.不可聚焦及不可使用按钮对悬浮窗进行操控.params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE| WindowManager.LayoutParams.FLAG_FULLSCREEN;//设置窗口初始停靠位置.params.gravity = Gravity.LEFT | Gravity.TOP;params.x = 0;params.y = 0;params.width = WindowManager.LayoutParams.WRAP_CONTENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;}

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE这三个标记很重要,不加会拦截事件,导致其他窗口无法响应事件。

监听手指按下与弹起并绘制辅助线

 @Overridepublic void onTouchDown() {   /*手指按下时开始画线*/try {if (point.x != -1 && point.y != -1) {lineView = new LineView(DrawLineService.this);lineView.start(point.x, point.y);windowManager.addView(lineView, params);}} catch (Exception ignored) {}}
      @Overridepublic void onTouchUp() {try {   /*手指弹起时释放画线*/lineView.stop();windowManager.removeView(lineView);} catch (Exception ignored) {}}

2.辅助线的View

public class LineView extends View {private static final float SPEED_X = 0.60f / 1080f;private static final float SPEED_Y = 0.35f / 1920f;private float mx, my, incrementY, incrementX;private int mWidth;private int mHeight;private long startTime;private Timer mTimer = new Timer();TimerTask mTimerTask;Paint p;private float mHeadOffset;public static float gOffset = 1f;/*因为底层接口返回的是小人头部坐标 线需要从脚部开始划 所以需要调整*/private float mDefaultHeadOffset = 40f;  public LineView(Context context) {super(context);init();}private void init() {DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();mWidth = displayMetrics.widthPixels;mHeight = displayMetrics.heightPixels;p = new Paint();p.setColor(Color.RED);p.setAntiAlias(true);p.setStrokeWidth(10.0f);mHeadOffset = ConvertUtils.dip2px(getContext(), mDefaultHeadOffset);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawLine(mx, my, incrementX, incrementY, p);// 斜线}/*** 手指按压住以后该方法执行,内部使用TimerTask完成直线绘制** @param x 小人头部x坐标* @param y 小人头部y坐标*/public void start(float x, float y) {startTime = System.currentTimeMillis();y += mHeadOffset;  /*小人脚部y坐标*/this.incrementX = x;this.incrementY = y;this.mx = x;this.my = y;if (isRight(mx)) {mTimerTask = new TimerTask() {@Overridepublic void run() {float ellapsed = System.currentTimeMillis() - startTime;/*** tips:0.35和0.60是根据测试结果调出来的 需要根据实际情况优化*/incrementY = my - ellapsed * SPEED_Y * mHeight * gOffset;   /* y / x = 0.58*/incrementX = mx - ellapsed * SPEED_X * mWidth * gOffset;postInvalidate();}};} else {mTimerTask = new TimerTask() {@Overridepublic void run() {float ellapsed = System.currentTimeMillis() - startTime;incrementY = my - ellapsed * SPEED_Y * mHeight * gOffset;incrementX = mx + ellapsed * SPEED_X * mWidth * gOffset;postInvalidate();}};}/*每隔10ms绘制一次*/mTimer.schedule(mTimerTask, 0, 10);}/*** 手指松开时调用该方法,调用时停止画线*/public void stop() {mTimerTask.cancel();mTimerTask = null;}/*** 判断当前小人在左边还是右边(根据左右来判断斜线往哪边画)* @return true 右边 false坐标*/private boolean isRight(float x) {WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);int width = wm.getDefaultDisplay().getWidth();if (x < width / 2) {return false; //left} else {return true;}}
}
  • 最后附上效果图

蹭一波热度:记微信跳一跳辅助线开发相关推荐

  1. c语言微信跳一跳辅助开发程序

    一.开发环境 开发环境 使用语言:C/C++ IDE:VS2010+ 其他三方库 EasyX(http://www.easyx.cn/downloads/) ADB(链接: https://pan.b ...

  2. python微信跳一跳_[小白教程] 用Python占领微信跳一跳排行榜

    文/帅朋 微信新版 6.6.1 加入了「跳一跳」这个游戏功能,并迅速在朋友圈之间火了起来.很多人为了能够跳到更高的分数而努力的奋斗着.那么今天我就来蹭一蹭「跳一跳」的热度,给大家提供一个方法让你快速的 ...

  3. 微信跳一跳高分辅助踩坑

    旧博文,搬到 csdn 原文:http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把,也把 ...

  4. 微信跳一跳(学习笔记)

    最近,微信跳一跳风靡朋友圈,Github上又有大佬用Python写出自动外挂,就因为感兴趣学习了一波还是有点难理解,不过主要还是去了解编程思想的,也算学习一下.下面是主要关键的学习代码(运行不了不完整 ...

  5. “Python来玩微信跳一跳”教程(问题总结)

    原文:<"Python来玩微信跳一跳"教程> 在上一篇文章中,收到了大家大量的问题反馈,因为问题比较多,并且有很多重复的问题,所以并没有一一回复,这里表示一下歉意,并整 ...

  6. 跳一跳python源码下载_微信跳一跳python代码实现

    本文实例为大家分享了python微信跳一跳的具体代码,供大家参考,具体内容如下 部分代码分享: wechat_jump.py from __future__ import print_function ...

  7. AI 玩微信跳一跳的正确姿势:跳一跳 Auto-Jump 算法详解

    作者丨安捷 & 肖泰洪 学校丨北京大学硕士生 研究方向丨计算机视觉 本文经授权转载自知乎专栏「学术兴趣小组」. 最近,微信小游戏跳一跳可以说是火遍了全国,从小孩子到大孩子仿佛每一个人都在刷跳一 ...

  8. 微信跳一跳高分系列四:一个 JAVA 版开源的微信跳一跳辅助工具

    基于前三篇文章,我们一起来制作一个自动化工具,解放劳动力,通过机器自动完成跳一跳 wechat-jump-helper 一款JAVA版开源的微信跳一跳小程序辅助工具 传送门一:wechat-jump- ...

  9. 微信跳一跳高分系列三:用 adb 破解微信跳一跳小程序

    写在前面:网上关于微信跳一跳的文章已有很多,写这篇的目的是对 adb 工具的一个熟悉过程,也是对未入门的新朋友的一个引导 步骤: 1.保存当前跳一跳页的截图到手机 adb shell screenca ...

最新文章

  1. 为什么静态成员、静态方法中不能用this和super关键字
  2. clickhouse原理解析与开发实战 pdf_Spring全家桶集合:SpringBoot+SpringCloud实战,Spring源码原理...
  3. _beginthreadex 一定要自己写 CloseHandle 可以不用 _endthreadex
  4. Java植物名录程序_程序员用Java语言编写多线程应用程序,程序员能控制的关键性工作有两个方面:一是编写线程的_________方法;二是建立线程实例。...
  5. 解决http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
  6. iphone/ipod网页开发教程及规则
  7. 【ASK】设置网卡启动遇到的事!
  8. 【转载】关于网页尺寸的设置
  9. C# XML文件操作类XmlHelper
  10. html中图片连续替换,C# 批量替换html中的图片 示例
  11. java 读取excel 文件 Unable to recognize OLE stream 错误
  12. (Kinetis K60) FTM输出PWM
  13. 地理信息系统概论 黄杏元版 期末复习资料
  14. REST Assured 5 - Abstraction抽象,隐藏实现
  15. oracle设置查看格式,Oracle 设置显示格式
  16. 操作系统进程同步例题(四)生产者-消费者问题
  17. win10 子系统之 Ubuntu,解放你的生产力
  18. JAVA学习【IDEA转中文】
  19. Python对象的浅拷贝与深拷贝
  20. python qt 按钮_Python QtWidgets.QPushButton方法代码示例

热门文章

  1. 探秘vue核心之虚拟DOM与diff算法
  2. Python CV 实现风格化图片转换
  3. 博彩黑链应急响应学习
  4. PEID加密算法识别插件Krypto ANALyzer
  5. 软件方法——业务建模和需求(好书推荐)
  6. Java基础之if练习打印星期天
  7. [NESCAFE27] 探险队
  8. 论文笔记——Asynchronous Decentralized Parallel Stochastic Gradient Descent
  9. 从零开始的博客建站之旅——准备工作
  10. 机器学习预测房价 (1)-数据可视化