autojs量角器-相机背景

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


界面展示


环境


手机: Mi 11 Pro


Android版本: 12


Autojs版本: 9.1.6


你将学到以下知识点


  • 全屏
  • 相机的基本使用
  • canvas画线, 画圆
  • canvas裁剪
  • canvas平移旋转
  • 两条线计算夹角


代码讲解


1. ui界面
ui.layout(
  <frame fitsSystemWindows="false" id="parentView">
    <Camera2View id="camera2_view" layout_width="match_parent" layout_height="match_parent" />
    <canvas id="board" w="*" h="*"></canvas>
  </frame>
);


帧布局, 底层是相机背景, 上层是画板canvas


2. 触摸监听, 更新角度
function getTouchListener() {
  let touchListener = function (view, event) {
    let x = event.getX();
    let y = event.getY();
    touchX = x;
    touchY = y;
    angle = parseInt(get2PointAngle({ x: 0, y: circle.y - circle.radius }, { x: x, y: y }, { x: 0, y: circle.y }));
    return true;
  };
  return touchListener;
}


3. 显示半圆, 半圆之外, 模糊背景
path.addCircle(circle.x, circle.y, circle.radius, circle.dir);
canvas.clipPath(path, Region.Op.DIFFERENCE);


4. 绘制顺序
board.on("draw", (canvas) => {
  canvas.save();
  canvas.clipPath(path, Region.Op.DIFFERENCE);
  canvas.drawColor(colors.parseColor(config.mainColor));
  canvas.restore();
  drawScale(canvas);
  drawSlideBar(canvas);
  drawValueDisplayArea(canvas);
});


绘制半圆--> 绘制刻度--> 绘制滑杆--> 绘制角度数值


5. 绘制角度
function drawValueDisplayArea(canvas) {
  let circle = config.circle;
  let x = circle.x + circle.radius / 2;
  let y = circle.y;
  let radius = circle.radius / 9;
  canvas.drawCircle(x, y, radius, ValueDisplayAreaPaint);
  canvas.save();
  canvas.translate(x, y);
  canvas.rotate(90);
  canvas.drawText(angle + "", 0, ValueDisplayAreaTextHeight / 2, config.ValueDisplayAreaTextPaint);
  canvas.restore();
}


绘制一个小圆, 作为角度数值的背景
canvas平移至小圆圆心
旋转90度, 因为我们的显示器是横屏
绘制文字, 让文字居中

6. 文字高度计算

ValueDisplayAreaTextPaint.setTextSize(70);
let rect = new Rect();
ValueDisplayAreaTextPaint.getTextBounds("1", 0, 1, rect);
ValueDisplayAreaTextHeight = rect.height();



设置文字大小之后, 再去计算文字高度


相关教程

https://www.yuque.com/yashujs/bfug6u/nik4gl

https://www.yuque.com/yashujs/bfug6u/czc9oo

https://www.yuque.com/yashujs/bfug6u/yv4ycv

https://www.yuque.com/yashujs/bfug6u/mm354k

https://www.yuque.com/go/doc/60367733

https://www.yuque.com/go/doc/50488791


名人名言


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


声明


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

相关文章
|
移动开发 JavaScript 前端开发
|
Android开发 Java API
Android中(Service )服务的最佳实践——后台执行的定时任务
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/47727367             Android中的定时任务一般有两种实现方式,一种是使用Java API里提供的Timer类,一种是使用Android的Alarm机制。
5107 0
人工智能 开发框架 自然语言处理
294 20
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
|
3月前
|
人工智能 安全 数据挖掘
MCP
模型上下文协议(MCP)是一种全新开放标准,旨在解决大型语言模型(LLM)与外部世界连接的局限。它为LLM与工具、数据库、硬件等建立统一、安全、标准化的通信机制,让AI从“全能模型”转变为可连接万物的“生态核心”,推动AI应用向更广泛领域扩展,开启通往通用人工智能(AGI)的新篇章。
|
6月前
|
存储 分布式计算 DataWorks
从MaxCompute到Milvus:通过DataWorks进行数据同步,实现海量数据高效相似性检索
如果您需要将存储在MaxCompute中的大规模结构化数据导入Milvus,以支持高效的向量检索和相似性分析,可以通过DataWorks的数据集成服务实现无缝同步。本文介绍如何利用DataWorks,快速完成从MaxCompute到Milvus的离线数据同步。
|
IDE Java API
Gradle 系列(2)手把手带你自定义 Gradle 插件
Gradle 系列(2)手把手带你自定义 Gradle 插件
1469 0
Gradle 系列(2)手把手带你自定义 Gradle 插件
|
存储 网络性能优化 网络虚拟化
局域网络设备
网卡、中继器、集线器、网桥和交换机是网络通信中的关键设备。网卡实现计算机与网络的连接,中继器用于延长网络传输距离,集线器将多台设备连接至共享网络,网桥通过MAC地址转发数据,而交换机提供高性能的数据转发和过滤服务,支持VLAN、QoS等功能,适用于不同规模的网络环境。
890 3
pyqt6 制作一个颜色调节器 02
本文介绍了如何使用PyQt6实现一个颜色调节器。首先创建了一个显示RGB颜色值变化的标签,然后通过三个旋钮(QDial)分别控制红、绿、蓝三种颜色的值,并在旋钮下方显示当前值。通过嵌套布局实现了旋钮和标签的排列,最终实现了颜色值的变化和显示。完整代码也一并提供。
297 0