YYPOST群发软件 发表于 2026-6-18 06:54:30

floatUI实例秒显示秒关闭吐司功能


floatUI实例秒显示秒关闭吐司功能


/*
   floatUI实例秒显示秒关闭吐司功能 v2 - AIWROK平台专用
   实现快速显示和自动关闭的悬浮窗提示效果
   
   功能特点:
   - 毫秒级响应速度
   - 支持自定义显示时长
   - 支持多种样式(成功、警告、错误、信息)
   - 支持可拖动功能
   - 自动关闭
*/

// ==================== 核心吐司类 ====================
function QuickToast() {
    this.toast = null;
    this.isShowing = false;
    this.autoCloseTimer = null;
}

// 创建吐司界面
QuickToast.prototype.create = function(message, type, duration, draggable) {
    var self = this;
   
    // 如果已有吐司在显示,先关闭
    if (this.isShowing && this.toast) {
      this.close();
    }
   
    // 创建新的floatUI实例
    this.toast = new floatUI();
   
    // 根据类型设置颜色
    var bgColor, textColor, borderColor;
    switch(type) {
      case 'success':
            bgColor = '#9028a14b';// 绿色背景
            textColor = '#ffffff';
            borderColor = '#28a14b';
            break;
      case 'warning':
            bgColor = '#90f39c12';// 橙色背景
            textColor = '#ffffff';
            borderColor = '#f39c12';
            break;
      case 'error':
            bgColor = '#90e74c3c';// 红色背景
            textColor = '#ffffff';
            borderColor = '#e74c3c';
            break;
      default:
            bgColor = '#903498db';// 蓝色背景(默认)
            textColor = '#ffffff';
            borderColor = '#3498db';
    }
   
    // 加载简洁的吐司布局(带ID用于拖动)
    this.toast.loadXML(
      '<LinearLayout id="toast_root" orientation="vertical" w="wrap_content" h="wrap_content" ' +
      'background="' + bgColor + '" padding="15" gravity="center">' +
      '<TextView text="' + message + '" textColor="' + textColor + '" ' +
      'textSize="16" layout_width="wrap_content" layout_height="wrap_content" ' +
      'padding="10 5"/>' +
      '</LinearLayout>'
    );
   
    // 设置初始位置(屏幕中央偏下)
    var screenWidth = screen.getScreenWidth();
    var screenHeight = screen.getScreenHeight();
    var x = (screenWidth - 300) / 2;
    var y = screenHeight * 0.6;
   
    this.toast.setPosition(x, y);
   
    // 如果启用拖动,设置触摸事件
    if (draggable) {
      this.enableDrag();
    }
   
    this.isShowing = true;
   
    // 设置自动关闭定时器
    if (duration && duration > 0) {
      var self = this;
      var dur = duration;
      this.autoCloseTimer = setTimeout(function() {
            self.close();
      }, dur);
    }
   
    return this;
};

// 启用拖动功能
QuickToast.prototype.enableDrag = function() {
    var self = this;
    var lastX = 0;
    var lastY = 0;
    var dragging = false;
   
    try {
      // 获取根视图(通过ID)
      var rootView = this.toast.findViewById('toast_root');
      if (!rootView) {
            printl("⚠️ 无法获取根视图,拖动功能不可用");
            return;
      }
      
      // 定义触摸事件常量(如果View和MotionEvent不存在)
      var ACTION_DOWN = (typeof MotionEvent !== 'undefined') ? MotionEvent.ACTION_DOWN : 0;
      var ACTION_MOVE = (typeof MotionEvent !== 'undefined') ? MotionEvent.ACTION_MOVE : 2;
      var ACTION_UP = (typeof MotionEvent !== 'undefined') ? MotionEvent.ACTION_UP : 1;
      
      printl("✅ 准备启用拖动功能...");
      
      // 设置触摸监听器
      rootView.setOnTouchListener(new android.view.View.OnTouchListener({
            onTouch: function(view, event) {
                try {
                  var action = event.getAction();
                  
                  if (action === ACTION_DOWN) {
                        dragging = true;
                        lastX = event.getRawX();
                        lastY = event.getRawY();
                        return true;
                  } else if (action === ACTION_MOVE && dragging) {
                        var dx = event.getRawX() - lastX;
                        var dy = event.getRawY() - lastY;
                        
                        // 获取当前位置
                        var currentPos = self.toast.getPosition();
                        var newX = currentPos.x + dx;
                        var newY = currentPos.y + dy;
                        
                        // 边界检查
                        var screenWidth = screen.getScreenWidth();
                        var screenHeight = screen.getScreenHeight();
                        if (newX < 0) newX = 0;
                        if (newY < 0) newY = 0;
                        if (newX > screenWidth - 200) newX = screenWidth - 200;
                        if (newY > screenHeight - 100) newY = screenHeight - 100;
                        
                        // 设置新位置
                        self.toast.setPosition(newX, newY);
                        
                        // 更新上次触摸位置
                        lastX = event.getRawX();
                        lastY = event.getRawY();
                        return true;
                  } else if (action === ACTION_UP) {
                        dragging = false;
                        return true;
                  }
                } catch(e) {
                  // 静默处理错误
                }
                return false;
            }
      }));
      
      printl("✅ 拖动功能已启用");
    } catch(e) {
      printl("⚠️ 启用拖动功能失败: " + e);
    }
};

// 关闭吐司
QuickToast.prototype.close = function() {
    if (this.toast && this.isShowing) {
      var self = this;
      try {
            self.toast.close();
      } catch(e) {
            printl("关闭吐司时出错: " + e);
      }
      self.isShowing = false;
      self.toast = null;
      self.autoCloseTimer = null;
    }
};

// ==================== 便捷函数 ====================

// 显示成功提示
function showSuccess(message, duration) {
    var toast = new QuickToast();
    toast.create(message || '操作成功', 'success', duration || 1500);
    return toast;
}

// 显示警告提示
function showWarning(message, duration) {
    var toast = new QuickToast();
    toast.create(message || '请注意', 'warning', duration || 2000);
    return toast;
}

// 显示错误提示
function showError(message, duration) {
    var toast = new QuickToast();
    toast.create(message || '操作失败', 'error', duration || 2500);
    return toast;
}

// 显示信息提示
function showInfo(message, duration) {
    var toast = new QuickToast();
    toast.create(message || '提示信息', 'info', duration || 1500);
    return toast;
}

// 极速显示(500ms自动关闭)
function quickShow(message) {
    var toast = new QuickToast();
    toast.create(message || '', 'info', 500);
    return toast;
}

// ==================== 使用示例 ====================

printl("========== 秒显示秒关闭吐司功能演示 v2 ==========");
printl("提示:尝试拖动标记为可拖动的吐司\n");

// 示例1:基础可拖动吐司
printl("【示例1】可拖动的基础提示(2秒后自动关闭)");
var t1 = new QuickToast();
t1.create("我可以拖动哦!", 'info', 2000, true);
sleep.second(秒=3);

// 示例2:成功提示
printl("\n【示例2】成功提示");
var t2 = showSuccess("操作成功!");
sleep.second(秒=2);

// 示例3:警告提示
printl("\n【示例3】警告提示");
var t3 = showWarning("请注意安全", 2000);
sleep.second(秒=2.5);

// 示例4:错误提示
printl("\n【示例4】错误提示");
var t4 = showError("网络连接失败");
sleep.second(秒=3);

// 示例5:长文本提示(可拖动)
printl("\n【示例5】长文本可拖动提示");
var t5 = new QuickToast();
t5.create("这是一个很长的提示信息,你可以拖动我到任何位置!试试看吧~", 'warning', 3000, true);
sleep.second(秒=4);

printl("\n========== 演示结束 ==========");
printl("\n使用说明:");
printl("1. quickShow('消息') - 快速显示500ms");
printl("2. showSuccess('消息', 时长ms) - 成功提示");
printl("3. showWarning('消息', 时长ms) - 警告提示");
printl("4. showError('消息', 时长ms) - 错误提示");
printl("5. showInfo('消息', 时长ms) - 信息提示");
printl("6. 自定义:new QuickToast().create('消息', '类型', 时长ms, 是否可拖动)");
printl("\n类型参数:'success', 'warning', 'error', 'info'");
printl("拖动参数:true=可拖动,false或不传=不可拖动");

/*
================ 功能说明 ================

这个脚本实现了一个快速显示、自动关闭的可拖动吐司提示系统,专为AIWROK平台设计。它提供了四种预设样式(绿色成功、橙色警告、红色错误、蓝色信息),支持自定义显示时长(建议500-3000毫秒),并可选启用触摸拖动功能让用户用手指自由移动提示框到屏幕任意位置。核心特性包括:毫秒级响应速度、新提示自动覆盖旧提示、自动边界检测防止拖出屏幕、提供便捷的调用函数如showSuccess显示成功提示、showWarning显示警告提示等。适用于自动化脚本中的操作反馈、状态提示、警告提醒、临时通知等场景,让用户体验更加友好和直观。

=========================================
*/


页: [1]
查看完整版本: floatUI实例秒显示秒关闭吐司功能