autojs显示指定区域

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


目标

在手机屏幕上显示指定的区域

两种方法

  1. 在已存在的图片上, 绘制矩形, 查看图片
  2. 在全屏透明悬浮窗上直接画矩形

已有图片 绘制矩形

  1. 读取图片
let imgFilepath = files.path("./chess.png");
let img = images.read(imgFilepath);


  1. 设置绘制区域
let rect = {
  left: 52,
  top: 20,
  right: 138,
  bottom: 96,
};


  1. 设置画笔属性: 绿色, 空心
let paint = new Paint();
paint.setStrokeWidth(9);
paint.setColor(colors.parseColor("#00ff00"));
paint.setStyle(Paint.Style.STROKE);


  1. 在图片上画矩形
var canvas = new Canvas(img);
canvas.drawRect(left, top, right, bottom, paint);


  1. 把canvas的数据转成图片
var image = canvas.toImage();
let filePath = "/sdcard/脚本/showRect.png";
files.createWithDirs(filePath);
images.save(image, filePath);


  1. 回收资源
image.recycle();
img.recycle();


  1. 查看图片
app.viewFile(filePath);


在全屏透明悬浮窗上直接画矩形, 圆形, 文字



使用示例

let Board = require("./board");
let board = new Board();
setTimeout(() => {
  board.drawText({
    x: 100,
    y: 200,
    text: "Hello World",
  });
  sleep(1000);
  board.setPaintColor("#00ff00");
  board.drawCircle({
    x: 200,
    y: 400,
    radius: 100,
  });
  sleep(1000);
  board.setPaintColor("#0000ff");
  board.drawRect({
    left: 400,
    top: 300,
    right: 600,
    bottom: 500,
  });
}, 1000);


把绘制方法封装成了一个模块Board



  1. 检查悬浮窗权限
function ensureFloatyPermission() {
  if (floaty.checkPermission()) {
    return true;
  }
  toastLog("请授予悬浮窗权限");
  app.startActivity({
    action: "android.settings.action.MANAGE_OVERLAY_PERMISSION",
    data: "package:" + context.packageName,
  });
  throw new Error("请授予悬浮窗权限");
}


  1. 创建悬浮窗
function createFloatyWindow() {
  let floatyWindow = floaty.rawWindow(
    <frame bg="#88ff0000">
      <canvas id="board" w="*" h="*" />
    </frame>
  );
  ui.run(function () {
    floatyWindow.setSize(-1, -1);
    floatyWindow.setPosition(0, 0);
    let touchable = false;
    floatyWindow.setTouchable(touchable);
  });
  return floatyWindow;
}


  1. 创建画笔
function createPaint() {
  paint = new Paint();
  paint.setStyle(Paint.Style.FILL);
  paint.setTextSize(100);
  return paint;
}


  1. 设置画板draw事件
board.on("draw", (canvas) => {
  canvas.drawColor(android.graphics.Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);
  canvas.drawBitmap(fullScreenBitmap, 0, 0, paint);
});


  1. 绘制矩形
Board.prototype.drawRect = function (rect) {
  ensureFullScreenCanvas(fullScreenCanvas);
  ensureRectType(rect);
  fullScreenCanvas.drawRect(rect.left, rect.top, rect.right, rect.bottom, paint);
};


所有代码能拆的都拆了, 每个功能函数的行数都很少,

见名知意, 满分10分, 我打9分

备注

全屏使用悬浮窗的 setSize(-1, -1);

部分手机可能覆盖不了状态栏或者底部三大金刚

测试环境

手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.14


名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 --- 牙叔教程

声明

部分内容来自网络 本教程仅用于学习, 禁止用于其他用途




相关文章
|
2月前
|
小程序 定位技术 API
uniapp 开发微信小程序 --【地图】打开地图选择位置,打开地图显示位置(可开启导航)
uniapp 开发微信小程序 --【地图】打开地图选择位置,打开地图显示位置(可开启导航)
258 0
|
4月前
|
前端开发 小程序
uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
508 0
|
iOS开发
iOS开发-banner滚动图自定义
iOS开发-banner滚动图自定义
198 0
iOS开发-banner滚动图自定义
|
定位技术 API 开发工具
百度地图开发-显示地图默认界面 03
百度地图开发-显示地图默认界面 03
260 1
百度地图开发-显示地图默认界面 03
|
文字识别 前端开发
autojs之选择指定区域
使用情景 为了展示ocr的识别效果, 要把识别的文字圈起来, 并且显示识别到的文字
348 0
autojs之选择指定区域
|
Android开发
|
人工智能 Android开发
autojs修改图片指定颜色
牙叔教程 简单易懂
607 0
|
Android开发
|
数据可视化
autojs可视化控件位置
牙叔教程 简单易学 使用场景
319 0
autojs可视化控件位置
|
Java Android开发
autojs之彩色下拉框
作者: 牙叔 使用情景: 做个彩色下拉框
421 0
autojs之彩色下拉框