/*
软件作者:https://xuhss.com/oxox/pro
*/
//定义悬浮窗控制模块,命名为(悬块)。
function 悬块(window, view) {
//判断是否缺少构造参数。
if (!window || !view) {
//缺少构造参数,抛出错误。
throw "缺参数";
};
//记录按键被按下时的触摸坐标
this.x = 0, this.y = 0;
//记录按键被按下时的悬浮窗位置
this.windowX, this.windowY;
//按下时长超过此值则执行长按等动作
this.downTime = 500;
//记录定时执行器的返回id
this.Timeout = 0;
//创建点击长按事件
this.Click = function() {};
this.LongClick = function() {};
//可修改点击长按事件
this.setClick = function(fun) {
//判断参数类型是否为函数?
if (typeof fun == "function") {
this.Click = fun;
};
};
this.setLongClick = function(fun, ji) {
//判断参数类型是否为函数?
if (typeof fun == "function") {
this.LongClick = fun;
//判断参数是否可为设置数字?
if (parseInt(ji) <= 1000) {
this.downTime = parseInt(ji);
};
};
};
view.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {
//判断当前触控事件,以便执行操作。
switch (event.getAction()) {
//按下事件。
case event.ACTION_DOWN:
//按下记录各种坐标数据。
this.x = event.getRawX();
this.y = event.getRawY();
this.windowX = window.getX();
this.windowY = window.getY();
//创建一个定时器用来定时执行长按操作。
this.Timeout = setTimeout(() => {
this.LongClick();
this.Timeout = 0;
}, this.downTime);
return true;
//移动事件。
case event.ACTION_MOVE:
//移动距离过大则判断为移动状态
if (Math.abs(event.getRawY() - this.y) > 5 && Math.abs(event.getRawX() - this.x) > 5) {
//移动状态清除定时器
if (this.Timeout) {
//定时器存在则清除定时器。
clearTimeout(this.Timeout);
this.Timeout = 0;
};
//移动手指时调整悬浮窗位置
window.setPosition(this.windowX + (event.getRawX() - this.x), this.windowY + (event.getRawY() - this.y));
};
return true;
//抬起事件。
case event.ACTION_UP:
if (this.Timeout) {
//手指抬起时,定时器存在,说明没有移动和按下时间小于长按时间。
//清除定时器。
clearTimeout(this.Timeout);
this.Timeout = 0;
//执行点击事件。
this.Click();
};
return true;
};
//控件的触控事件函数必须要返回true。否则报错。
return true;
}));
};
auto();
console.show();
launchApp("QQ");
log("开始");
//创建并生成一个悬浮窗。
var window = floaty.window(
<vertical >
<button id="but_x"w="*" layout_weight="1" text="选图"/>
<button id="but" w="*" layout_weight="1" text="开始"/>
</vertical>
);
// <button id="but_d"w="*" layout_weight="1" text="读取"/>
//输出提示信息。
toastLog("长按悬浮窗关闭本脚本");
//空运行定时器保持脚本运行中,这是悬浮窗脚本所必需的。
setInterval(() => {}, 500);
//声明一个变量用来控制线程。
var thread = null;
var path;
//创建一个新的悬浮控制模块 ad 并带入参数(所要控制的悬浮窗和用来控制悬浮窗移动的控件)。
var ad = new 悬块(window, window.but);
//设置长按事件。
ad.setLongClick(function() {
//输出气泡信息。
toast("脚本已关闭");
//脚本停止代码。
exit();
});
//设置点击事件。
ad.setClick(function() {
//输出气泡信息。
toast("点击");
//变量值为空则代表线程没有开启。变量值不为空,则判断线程是不是正在运行。
if (thread ? !thread.isAlive() : true) { //线程没有运行。
ui.run(() => {
//在ui线程中修改按钮的文字
window.but.setText("停止");
});
//新建一个线程,赋值给变量thread
thread = threads.start(function() {
try {
Main();
} catch (e) {
toastLog(e);
};
//运行完毕修改按钮文字
ui.run(() => {
//在ui线程中修改按钮的文字
window.but.setText("开始");
});
});
} else {
thread.interrupt();
//中断线程;
ui.run(() => {
//在ui线程中修改按钮的文字
window.but.setText("开始");
});
};
});
window.but_x.click(function() {
threads.start(function() {
switch (dialogs.select("选择方式", ["媒体库", "文件"])) {
case 0:
var photosPath = getPhotosInfo(5).map(function(obj) {
return obj.filePath;
});
let i = dialogs.select("选择", photosPath);
if (i + 1) {
path = photosPath[i];
toastLog("已选");
};
break;
case 1:
let p = selectFile("/sdcard/", "", function(name) {
return name.endsWith(".jpg") || name.endsWith(".png") || files.isDir(files.join("/sdcard", name));
});
if (p) {
path = p;
toastLog("已选");
};
break;
};
});
});
toast("finish");
function Main() {
//这里是主要运行的内容
if (path) {
draw(path);
} else {
toastLog("未选图片");
};
};
function draw(path) {
var img = images.read(path);
img = images.resize(img, [128], "LANCZOS4");
img = images.grayscale(img)
img = images.adaptiveThreshold(img, 200, "MEAN_C", "BINARY", 25, 10);
img = images.adaptiveThreshold(img, 200, "MEAN_C", "BINARY", 3, 3);
//img = images.scale(img, 0.3, 0.3)
var bitmap = img.getBitmap();
var img_w = bitmap.getWidth();
var img_h = bitmap.getHeight();
var pixels = util.java.array("int", img_w * img_h);
bitmap.getPixels(pixels, 0, img_w, 0, 0, img_w, img_h);
// log(pixels)
笔画 = 画图(pixels, img_w, img_h)
//log(笔画)
//toastLog("图片读取完成,请打开涂鸦界面点击画画")
/*
img = images.grayscale(img);
img = images.adaptiveThreshold(img, 200, "MEAN_C", "BINARY", 25, 10);
img_w = img.getWidth()
img_h = img.getHeight()
img = images.rotate(img, 0);
*/
/*
if (Boolean(mode)) {
img = images.inRange(img, colors.rgb(0, 0, 0), colors.rgb(threshold, threshold, threshold)) //越大越暗
} else {
img = images.inRange(img, colors.rgb(threshold, threshold, threshold), colors.rgb(255, 255, 255)) //越大越暗
}
for (var i = 0; i < length - 1; i++) {
img_l = images.concat(img_l_o, img_l, "TOP")
}
img = images.concat(img, img_l)
*/
//images.save(img, "./img1.png");
//media.scanFile("./img1.png");
log("img", img_w, img_h);
//exit
没有合适的资源?快使用搜索试试~ 我知道了~
AutoJs源码-选图涂鸦线条
共1个文件
js:1个
需积分: 1 0 下载量 85 浏览量
2022-11-16
20:34:57
上传
评论
收藏 5KB 7Z 举报
温馨提示
AutoJs源码-选图涂鸦线条。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、安装过程详见具体资源,不会使用autojs谨慎下载
资源推荐
资源详情
资源评论
收起资源包目录
AutoJs源码-选图涂鸦线条.7z (1个子文件)
AutoJs源码-选图涂鸦线条.js 17KB
共 1 条
- 1
资源评论
[虚幻私塾】
- 粉丝: 336
- 资源: 1558
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功