Android App运行核心,Handler,Looper,Message_android app looper message

随笔2个月前发布 快乐小鱼儿
34 0 0
let paint = new Paint();
paint.setStrokeWidth(9);
paint.setColor(colors.parseColor("#00ff00"));
paint.setStyle(Paint.Style.STROKE); 


12345

在图片上画矩形

var canvas = new Canvas(img);
canvas.drawRect(left, top, right, bottom, paint); 


123

把canvas的数据转成图片

var image = canvas.toImage();
let filePath = "/sdcard/脚本/showRect.png";
files.createWithDirs(filePath);
images.save(image, filePath); 


12345

回收资源

image.recycle();
img.recycle(); 


123

查看图片

app.viewFile(filePath); 


12

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IplbkEj-1653470466691)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/97542b35b48c4f8bae83178b5e2a29ce~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]

使用示例

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); 



12345678910111213141516171819202122232425

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

Android App运行核心,Handler,Looper,Message_android app looper message

检查悬浮窗权限

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



12345678910111213

创建悬浮窗

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




12345678910111213141516

创建画笔

function createPaint() {
  paint = new Paint();
  paint.setStyle(Paint.Style.FILL);
  paint.setTextSize(100);
  return paint;
} 



12345678

设置画板draw事件

board.on("draw", (canvas) => {
  canvas.drawColor(android.graphics.Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);
  canvas.drawBitmap(fullScreenBitmap, 0, 0, paint);
}); 



123456

绘制矩形

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



1234567

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

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

备注

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

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

测试环境

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

名人名言

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

声明

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

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴直接点击文末小卡片免费领取哦,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...