红色是什么 发表于 2025-12-19 18:31:35

试试,火山论坛的表格代码预览功能

本帖最后由 红色是什么 于 2025-12-21 09:38 编辑

<火山程序 类型 = "通常" 版本 = 1 />

类 安卓通用对象列表模板基础类 <公开 注释 = "实现动态数组的模板" 注释 = "ArrayList<数据类型>" 注释 = "" 注释 = "注意:"
      注释 = "本类不适用基本类型,【因为火山的模板类型1不支持基本类型自动装箱】" 注释 = "但是可以使用基本类型的包装类" 注释 = "以及用户自定义类型" 折叠
      编辑时信息 = "1C664A, 0, 0, 0" @模板基础类 = 真 @别名 = "java.util.ArrayList<模板类型1>"
      @java.导入 = "java.util.ArrayList\njava.util.List\njava.util.Iterator\njava.util.Collections">
{

    #

    方法 加入成员 <公开 静态 类型 = 逻辑型 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 数据 <类型 = 模板类型1 @输出名 = "mm">
    {
      @ return obj.add(mm);
    }

    方法 插入成员 <公开 静态 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 指定下标 <类型 = 整数 @输出名 = "index">
    参数 数据 <类型 = 模板类型1 @输出名 = "mm">
    {
      @obj.add(index,mm);


    }

    方法 取出成员 <公开 静态 类型 = 模板类型1 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 指定下标 <类型 = 整数 @输出名 = "index">
    参数 ""
    {
      @ return obj.get(index);
    }

    方法 修改指定成员 <公开 静态 类型 = 模板类型1 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 指定下标 <类型 = 整数 @输出名 = "index">
    参数 数据 <类型 = 模板类型1 @输出名 = "element">
    参数 ""
    {
      @ return obj.set(index,element);
    }

    方法 删除指定成员 <公开 静态 类型 = 模板类型1 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 指定下标 <类型 = 整数 @输出名 = "index">
    参数 ""
    {
      @ return obj.remove(index);

    }

    方法 删除成员内容 <公开 静态 类型 = 逻辑型 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 成员对象 <类型 = 模板类型1 @输出名 = "mm">
    参数 ""
    {
      @ return obj.remove(mm);


    }

    方法 清空列表 <公开 静态 折叠>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ obj.clear();

    }

    方法 取成员数 <公开 静态 类型 = 整数 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ obj.size();
    }

    方法 是否为空 <公开 静态 类型 = 逻辑型 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ obj.isEmpty();

    }

    方法 是否包含 <公开 静态 类型 = 逻辑型 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 成员对象 <类型 = 模板类型1 @输出名 = "mm">
    {
      @ return obj.contains(mm);

    }

    方法 查找首次出现成员下标 <公开 静态 类型 = 整数 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 成员对象 <类型 = 模板类型1 @输出名 = "mm">
    参数 ""
    {
      @ return obj.indexOf(mm);
    }

    方法 查找最后出现成员下标 <公开 静态 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 成员对象 <类型 = 模板类型1 @输出名 = "mm">
    参数 ""
    {
      @ return obj.lastIndexOf(mm);

    }

    方法 转换为数组 <公开 静态 类型 = "模板类型1[]" 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ return obj.toArray();

    }

    方法 取哈希码 <公开 静态 类型 = 整数 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ return obj.hashCode();

    }

    方法 浅拷贝 <公开 静态 类型 = 安卓通用对象列表模板基础类 折叠 @禁止流程检查 = 真>
    参数 当前对象 <类型 = 安卓通用对象列表模板基础类 @输出名 = "obj">
    参数 ""
    {
      @ return obj.clone();
    }

    #
    #
}

红色是什么 发表于 2025-12-19 18:31:36

本帖最后由 红色是什么 于 2026-7-4 23:05 编辑

<火山程序 类型 = "通常" 版本 = 1 />

类 测试用户类 <公开 基础类 = 扩展对象类 注释 = "示例测试" 折叠>
{
    变量 名字 <公开 类型 = 文本型>
    变量 手机号 <公开 类型 = 文本型>

    #

    方法 取展示内容 <公开 类型 = 文本型 注释 = "将本对象中的所有数据用文本方式返回." 注释 = "可用作\"到文本()\"方法转换对象到文本或\"调试输出2\"等其它场合展示时使用."
            注释 = "" @虚拟方法 = 可覆盖>
    {
      返回 (名字)// 调用基础类中的被覆盖虚拟方法
    }
}

类 用户数组类 <公开 基础类 = 安卓通用对象列表模板基础类 注释 = "示例测试" 折叠 @模板实现类 = "测试用户类">
{

    #
}

红色是什么 发表于 2025-12-19 18:31:37

本帖最后由 红色是什么 于 2026-4-30 21:37 编辑

<火山程序 类型 = "通常" 版本 = 1 />

方法 测试方法 <折叠>
{
    变量 用户数组对象 <类型 = 用户数组类>

    计次循环 (10)
    {
      变量 test <类型 = 测试用户类>

      test.名字 = "name" + 到文本 (取循环索引 ())
      test.手机号="666"
      用户数组对象.加入成员 (,test )


    }
    调试输出2 (用户数组对象)


}

红色是什么 发表于 2025-12-19 18:39:47

本帖最后由 红色是什么 于 2026-6-17 16:43 编辑

<火山程序 类型 = "通常" 版本 = 1 />

包 火山.测试

#
#
# ===安卓自定义绘制窗口组件

类 安卓绘制窗口组件基础类 <公开 基础类 = 安卓窗口组件 注释 = "用作用户自行定义安卓窗口组件时所使用的基础类." 注释 = "本类仅用作系统内部使用." 折叠 折叠2 @文档 = "category = \"窗口组件.自定义组件\""
      @java.导入 = "android.graphics.Bitmap" @java.导入 = "android.graphics.Canvas" @禁止创建对象 = 真>
{

    # 相关本地代码 ---
    #
    # @begin
    #
    # public interface CallbackListenner {
    #   
    #   void onMeasure(int widthSpec, int heightSpec,int widthVal,int heightVal);
    #   void onSizeChanged (int w, int h, int oldw, int oldh);
    #   void onDraw (android.graphics.Canvas canvas);
    #   boolean onTrackballEvent (android.view.MotionEvent event);
    #   boolean onKeyEvent (int notifyType, int keyCode, android.view.KeyEvent event);
    #   boolean onTouchEvent (android.view.MotionEvent event);
    #   boolean onGenericMotionEvent (android.view.MotionEvent event);
    #   void onFocusChanged (boolean gainFocus, int direction, android.graphics.Rect previouslyFocusedRect);
    #   void onWindowFocusChanged (boolean hasFocus);
    #   void onAttachedToWindow ();
    #   void onDetachedFromWindow ();
    #   void onWindowVisibilityChanged (int visibility);
    # }
    #
    # public void setCallbackListenner (CallbackListenner callback) {
    #   m_callback = callback;
    # }
    #
    # CallbackListenner m_callback;
    # @dt<尺寸类> m_sizeMeasure = new @dt<尺寸类> ();
    #
    # //--
    #
    # public @sn<current_class> (android.content.Context context) {
    #   this (context, null, 0);
    # }
    #
    # public @sn<current_class> (android.content.Context context, android.util.AttributeSet attrs) {
    #   this (context, attrs, 0);
    # }
    #
    # public @sn<current_class> (android.content.Context context, android.util.AttributeSet attrs, int defStyle) {
    #   super (context, attrs, defStyle);
    # }
    #
    #
    # @Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
    #   super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    #   // 获得测量参数
    #   final int widthMode = android.view.View.MeasureSpec.getMode (widthMeasureSpec);
    #   final int widthSpec = android.view.View.MeasureSpec.getSize (widthMeasureSpec);
    #   final int heightMode = android.view.View.MeasureSpec.getMode (heightMeasureSpec);
    #   final int heightSpec = android.view.View.MeasureSpec.getSize (heightMeasureSpec);
    #   if (m_callback != null) {      
    #         m_callback.onMeasure(widthMode,heightMode,widthSpec,heightSpec);
    #   }
    #
    # }
    #
    # @Override protected void onSizeChanged (int w, int h, int oldw, int oldh) {
    #   super.onSizeChanged (w, h, oldw, oldh);
    #   if (m_callback != null)
    #         m_callback.onSizeChanged (w, h, oldw, oldh);
    # }
    #
    # @Override protected void onDraw (android.graphics.Canvas canvas) {
    #   super.onDraw (canvas);
    #   if (m_callback != null)
    #         m_callback.onDraw (canvas);
    # }
    #
    # @Override public boolean onTrackballEvent (android.view.MotionEvent event) {
    #   if (m_callback != null && m_callback.onTrackballEvent (event))
    #         return true;
    #   return super.onTrackballEvent (event);
    # }
    #
    # @Override public boolean onKeyDown (int keyCode, android.view.KeyEvent event) {
    #   if (m_callback != null && m_callback.onKeyEvent (@<按键通知类型.被按下>, keyCode, event))
    #         return true;
    #   return super.onKeyDown (keyCode, event);
    # }
    #
    # @Override public boolean onKeyLongPress (int keyCode, android.view.KeyEvent event) {
    #   if (m_callback != null && m_callback.onKeyEvent (@<按键通知类型.被长按>, keyCode, event))
    #         return true;
    #   return super.onKeyLongPress (keyCode, event);
    # }
    #
    # @Override public boolean onKeyMultiple (int keyCode, int repeatCount, android.view.KeyEvent event) {
    #   if (m_callback != null && m_callback.onKeyEvent (@<按键通知类型.多重按键>, keyCode, event))
    #         return true;
    #   return super.onKeyMultiple (keyCode, repeatCount, event);
    # }
    #
    # @Override public boolean onKeyShortcut (int keyCode, android.view.KeyEvent event) {
    #   if (m_callback != null && m_callback.onKeyEvent (@<按键通知类型.快捷键被按下>, keyCode, event))
    #         return true;
    #   return super.onKeyShortcut (keyCode, event);
    # }
    #
    # @Override public boolean onKeyUp (int keyCode, android.view.KeyEvent event) {
    #   if (m_callback != null && m_callback.onKeyEvent (@<按键通知类型.被放开>, keyCode, event))
    #         return true;
    #   return super.onKeyUp (keyCode, event);
    # }
    #
    # @Override public boolean onTouchEvent (android.view.MotionEvent event) {
    #   if (m_callback != null && m_callback.onTouchEvent (event))
    #         return true;
    #   return super.onTouchEvent (event);
    # }
    #
    # @Override public boolean onGenericMotionEvent (android.view.MotionEvent event) {
    #   if (m_callback != null && m_callback.onGenericMotionEvent (event))
    #         return true;
    #   return super.onGenericMotionEvent (event);
    # }
    #
    # @Override protected void onFocusChanged (boolean gainFocus, int direction, android.graphics.Rect previouslyFocusedRect) {
    #   super.onFocusChanged (gainFocus, direction, previouslyFocusedRect);
    #   if (m_callback != null)
    #         m_callback.onFocusChanged (gainFocus, direction, previouslyFocusedRect);
    # }
    #
    # @Override public void onWindowFocusChanged (boolean hasFocus) {
    #   super.onWindowFocusChanged (hasFocus);
    #   if (m_callback != null)
    #         m_callback.onWindowFocusChanged (hasFocus);
    # }
    #
    # @Override protected void onAttachedToWindow () {
    #   super.onAttachedToWindow ();
    #   if (m_callback != null)
    #         m_callback.onAttachedToWindow ();
    # }
    #
    # @Override protected void onDetachedFromWindow () {
    #   super.onDetachedFromWindow ();
    #   if (m_callback != null)
    #         m_callback.onDetachedFromWindow ();
    # }
    #
    # @Override protected void onWindowVisibilityChanged (int visibility) {
    #   super.onWindowVisibilityChanged (visibility);
    #   if (m_callback != null)
    #         m_callback.onWindowVisibilityChanged (visibility);
    # }
    #
    #
    # /**
    # *此方法是将 protected void setMeasuredDimension(整数,整数)
    # *访问控制权限改为 外部类可调用方法 setMeasuredDimension_out
    # */
    # public void setMeasuredDimension_out (int newWidthVal,int newHeightVal){
    #   super.setMeasuredDimension(newWidthVal, newHeightVal);
    # }
    #
    #
    # /**
    # *
    # */
    #
    #
    # /**
    #      * 额外功能:截图返回 Bitmap
    #      */
    #   public Bitmap capture() {
    #         // 如果 View 还没有尺寸,返回 null
    #         if (getWidth() <= 0 || getHeight() <= 0) {
    #             return null;
    #         }
    #         
    #         // 创建和 View 一样大的 Bitmap
    #         Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    #         
    #         // 把 View 的内容画到 Bitmap 上
    #         draw(new Canvas(bitmap));
    #         
    #         return bitmap;
    #   }
    #
    #
    #
    # @end
}

类 安卓绘制窗口组件 <公开 基础类 = 窗口组件 注释 = "火山自定义窗口组件的基础类" 注释 = "" 注释 = "该类彻底模拟组件" 折叠 折叠2 @文档 = "category = \"窗口组件.自定义组件\"" ""
      @安卓.窗口组件.布局配置 = "native_class = \"@安卓绘制窗口组件基础类\"" @禁止创建对象 = 真>
{

    # @ @m<DEFINE_ABS_CONTROL2> (安卓绘制窗口组件, AndroidDrawControl, @dt<安卓绘制窗口组件基础类>)
    #
    #
    # 通知 ---
    #

    方法 通知_尺寸被改变 <公开 注释 = "通知继承类当前组件的尺寸已经被改变" 折叠 @虚拟方法 = 可覆盖>
    参数 最新宽度 <类型 = 整数 注释 = "提供本组件当前的最新宽度">
    参数 最新高度 <类型 = 整数 注释 = "提供本组件当前的最新高度">
    参数 先前宽度 <类型 = 整数 注释 = "提供本组件当前的先前宽度,如果本组件刚刚加入窗口,则本参数值为0.">
    参数 先前高度 <类型 = 整数 注释 = "提供本组件当前的先前高度,如果本组件刚刚加入窗口,则本参数值为0.">

    方法 通知_按键事件 <公开 类型 = 逻辑型 注释 = "当用户在本组件上使用设备真实/虚拟按键进行输入时,本方法被调用." 返回值注释 = "返回真表示本通知已经被处理且不再需要进行默认处理,返回假表示未被处理." 折叠
            @虚拟方法 = 可覆盖>
    参数 通知类型 <类型 = 按键通知类型 注释 = "提供具体的按键通知类型">
    参数 按键代码 <类型 = 整数 注释 = "提供按键的代码值,可能的代码值请见\"按键代码类\"中定义的常量表.">
    参数 按键输入事件 <类型 = 按键事件类 注释 = "提供具体的按键输入事件">
    {
      返回 (假)
    }

    方法 通知_轨迹球事件 <公开 类型 = 逻辑型 注释 = "当用户基于轨迹球在本组件内进行输入时,本方法被调用." 返回值注释 = "返回真表示本通知已经被处理且不再需要进行默认处理,返回假表示未被处理." 折叠 @虚拟方法 = 可覆盖>
    参数 轨迹球动作事件 <类型 = 动作事件类 注释 = "提供具体的轨迹球动作信息">
    {
      返回 (假)
    }

    方法 通知_通用动作事件 <公开 类型 = 逻辑型 注释 = "当用户在本组件上使用除开按键/触摸屏/鼠标/轨迹球以外的设备进行输入" 注释 = "时(譬如游戏控制杆等),本方法被调用."
            返回值注释 = "返回真表示本事件已经被处理且不再需要进行默认处理,返回假表示未被处理." 折叠 折叠2 @虚拟方法 = 可覆盖>
    参数 通用动作事件 <类型 = 动作事件类 注释 = "提供具体的通用动作事件">
    {
      返回 (假)
    }

    方法 通知_被触摸 <公开 类型 = 逻辑型 注释 = "当用户触摸了本组件所在区域时,本方法被调用." 返回值注释 = "返回真表示本通知已经被处理且不再需要进行默认处理,返回假表示未被处理." 折叠 @虚拟方法 = 可覆盖>
    参数 触摸动作事件 <类型 = 动作事件类 注释 = "提供具体的被触摸动作信息">
    {
      返回 (假)
    }

    方法 通知_焦点被改变 <公开 注释 = "当本组件的焦点状态发生改变后,本方法被调用." 折叠 @虚拟方法 = 可覆盖>
    参数 是否获得焦点 <类型 = 逻辑型 注释 = "为真表示本组件获得了焦点,为假表示失去了焦点.">
    参数 焦点移动方向 <类型 = 组件焦点移动方向 注释 = "当本组件的焦点变化是因为方向键导航引起的时候,提供具体" 注释 = "的焦点移动方向." 折叠2>
    参数 先前焦点矩形 <类型 = 矩形类 注释 = "当本组件的焦点变化是因为方向键导航引起的时候,提供先前" 注释 = "焦点组件所处的矩形坐标位置(相对本组件的左上角)." 注释 = "注意: 如果没有此信息,本参数值键为空对象."
            折叠2>

    方法 通知_挂接到窗口 <公开 注释 = "当本组件挂接进窗口后发送本通知." 注释 = "组件可以在此通知中进行绘制前的相关初始化操作." 注释 = "本通知必定在\"通知_绘制内容\"和\"通知_测量内容尺寸\"通知前被发送."
            注释 = "本通知与\"通知_从窗口脱离\"对应发送." 折叠2 @虚拟方法 = 可覆盖>

    方法 通知_从窗口脱离 <公开 注释 = "当本组件从所处窗口脱离后发送本通知." 注释 = "组件可以在此通知中进行绘制后的相关善后清理操作." 注释 = "本通知与\"通知_挂接到窗口\"对应发送." 折叠2 @虚拟方法 = 可覆盖>

    方法 通知_所处窗口焦点改变 <公开 注释 = "当本组件所处窗口的焦点状态发生改变后,本方法被调用." 注释 = "一般情况下,处于被激活状态(\"窗口类.通知_被激活\"方法被调用)的窗口都会拥有焦点," 注释 = "以下情况除外:"
            注释 = "1. 该窗口自身显示了一个对话框或者弹出窗口;" 注释 = "2. 安卓系统显示了一个系统窗口(譬如系统通知面板/系统警告窗口等),此时该窗口" 注释 = "将临时失去焦点但是不会失去被激活状态." 折叠 折叠2
            @虚拟方法 = 可覆盖>
    参数 是否获得焦点 <类型 = 逻辑型 注释 = "提供本组件所处窗口当前是否获得了焦点">

    方法 通知_所处窗口可视改变 <公开 注释 = "当本组件所处窗口的可视状态发生改变后,本方法被调用." 注释 = "注意: 本通知仅当所处窗口的可视状态发生改变时被发送,而当所处"
            注释 = "窗口被其它窗口完全遮盖时,并不会发送此通知." 折叠 折叠2 @虚拟方法 = 可覆盖>
    参数 当前可视状态 <类型 = 组件可视状态 注释 = "提供本组件所处窗口的当前最新可视状态">

    #
    # 新方法

    方法 当_测量尺寸时 <公开 注释 = "模式有三种:" 注释 = "    1.尺寸类型_未指定模式" 注释 = "    2.尺寸类型_精确模式" 注释 = "    3.尺寸类型_内容模式" 注释 = ""
            注释 = "根据测量后决定绘制组件宽高方法:" 注释 = "    设置测量最终尺寸()" 折叠 折叠2 @虚拟方法 = 可覆盖>
    参数 宽模式 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getMode (widthMeasureSpec)">
    参数 高模式 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getMode (heightMeasureSpec)">
    参数 宽度值 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getSize (widthMeasureSpec)">
    参数 高度值 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getSize (heightMeasureSpec)">
    {

    }

    方法 当_绘制组件时 <公开 注释 = "组件继承类需要绘制本组件中的内容" 折叠 @虚拟方法 = 可覆盖>
    参数 画板对象 <类型 = 画板类>
    {

    }

    #

    方法 设置测量最终尺寸 <公开 折叠 "">
    参数 新宽度 <类型 = 整数>
    参数 新高度 <类型 = 整数>
    {
      @ GetAndroidDrawControl().setMeasuredDimension_out(@<新宽度>, @<新高度>);
    }

    方法 取组件自身截图 <公开 类型 = 位图类 折叠 @禁止流程检查 = 真>
    {
      @ return GetAndroidDrawControl().capture();
    }

    # 组件更新

    方法 立即执行 <公开 注释 = "需要重写" 注释 = "post任务" 折叠 折叠2 @禁止流程检查 = 真>
    参数 任务对象 <类型 = 线程运行类>
    {
      @ returnGetAndroidDrawControl().post(@<任务对象>);

    }

    方法 延迟执行 <公开 类型 = 逻辑型 注释 = "需要重写" 注释 = "postDelayed任务" 折叠 折叠2 @禁止流程检查 = 真>
    参数 任务对象 <类型 = 线程运行类>
    参数 毫秒 <类型 = 整数 @默认值 = 1000>
    {
      @ return GetAndroidDrawControl().postDelayed(@<任务对象>,@<毫秒>);

    }

    方法 下一帧执行 <公开 折叠>
    参数 任务对象 <类型 = 线程运行类>
    参数 毫秒 <类型 = 整数>
    {
      @ GetAndroidDrawControl().postOnAnimation(@<任务对象>);
    }

    方法 定时执行 <公开 折叠 @禁止流程检查 = 真>
    参数 任务对象 <类型 = 线程运行类>
    参数 毫秒 <类型 = 整数>
    {
      @ returnGetAndroidDrawControl().postAtTime(@<任务对象>,SystemClock.uptimeMillis()+ @<毫秒>);

    }

    方法 定时执行2 <公开 折叠 @禁止流程检查 = 真>
    参数 任务对象 <类型 = 线程运行类>
    参数 token <类型 = 对象类>
    参数 毫秒 <类型 = 整数>
    {
      @ returnGetAndroidDrawControl().postAtTime(@<任务对象>,@<token>,SystemClock.uptimeMillis()+ @<毫秒>);
    }

    方法 移除任务 <公开 折叠 @禁止流程检查 = 真>
    参数 任务对象 <类型 = 线程运行类>
    {
      @ returnGetAndroidDrawControl().removeCallbacks(@<任务对象>);

    }

    方法 移除任务2 <公开 折叠>
    参数 任务对象 <类型 = 线程运行类>
    参数 token <类型 = 对象类>
    {
      @GetAndroidDrawControl().removeCallbacks(@<任务对象>,@<token>);


    }

    方法 移除任务3 <公开 折叠>
    参数 token <类型 = 对象类>
    {
      @GetAndroidDrawControl().removeCallbacks(@<token>);


    }

    #
    #
    # 相关本地代码 ---
    #
    # @begin
    #
    # // 挂接相关事件
    # @Override protected void OnInitView (android.content.Context context, Object objInitData) {
    #   super.OnInitView (context, objInitData);
    #
    #   GetAndroidDrawControl().setCallbackListenner (new @dt<安卓绘制窗口组件基础类>.CallbackListenner () {
    #             @Override public void onMeasure(int widthSpec, int heightSpec,int widthVal,int heightVal){
    #               @<当_测量尺寸时> (widthSpec, heightSpec,widthVal,heightVal);
    #               
    #             }
    #            
    #
    #
    #
    #             @Override public void onSizeChanged (int w, int h, int oldw, int oldh) {
    #               @<通知_尺寸被改变> (w, h, oldw, oldh);
    #             }
    #
    #             @Override public void onDraw (android.graphics.Canvas canvas) {
    #               //@<通知_绘制内容> (canvas);
    #               @<当_绘制组件时>(canvas);
    #             }
    #
    #             @Override public boolean onTrackballEvent (android.view.MotionEvent event) {
    #               return @<通知_轨迹球事件> (event);
    #             }
    #
    #             @Override public boolean onKeyEvent (int notifyType, int keyCode, android.view.KeyEvent event) {
    #               return @<通知_按键事件> (notifyType, keyCode, event);
    #             }
    #
    #             @Override public boolean onTouchEvent (android.view.MotionEvent event) {
    #               return @<通知_被触摸> (event);
    #             }
    #
    #             @Override public boolean onGenericMotionEvent (android.view.MotionEvent event) {
    #               return @<通知_通用动作事件> (event);
    #             }
    #
    #             @Override public void onFocusChanged (boolean gainFocus, int direction, android.graphics.Rect previouslyFocusedRect) {
    #               @<通知_焦点被改变> (gainFocus, direction, previouslyFocusedRect);
    #             }
    #
    #             @Override public void onWindowFocusChanged (boolean hasFocus) {
    #               @<通知_所处窗口焦点改变> (hasFocus);
    #             }
    #
    #             @Override public void onAttachedToWindow () {
    #               @<通知_挂接到窗口> ();
    #             }
    #
    #             @Override public void onDetachedFromWindow () {
    #               @<通知_从窗口脱离> ();
    #             }
    #
    #             @Override public void onWindowVisibilityChanged (int visibility) {
    #               @<通知_所处窗口可视改变> (visibility);
    #             } } );
    # }
    #
    #
    #
    #
    #
    #
    # @end
    #

    常量 尺寸类型_未指定模式 <公开 类型 = 整数 值 = @android.view.View.MeasureSpec.UNSPECIFIED 注释 = "没有具体要求,组件可以返回任意测量尺寸.">
    常量 尺寸类型_精确模式 <公开 类型 = 整数 值 = @android.view.View.MeasureSpec.EXACTLY 注释 = "指定宽高度 或者匹配父组件宽高度 一方时">
    常量 尺寸类型_内容模式 <公开 类型 = 整数 值 = @android.view.View.MeasureSpec.AT_MOST 注释 = "匹配内容宽高">

    #
}

类 我的组件 <公开 基础类 = 安卓绘制窗口组件 折叠 折叠2 @安卓.窗口组件.布局配置 = "native_class = \"@安卓绘制窗口组件基础类\"\ncategory=\"基本组件\"" "//背景色" = 颜色类.红色>
{

    # @begin
    # @m<DEFINE_CONTROL2>(我的组件,MyView,@dt<安卓绘制窗口组件基础类>);
    # @end

    方法 当_绘制组件时 <公开 折叠 @虚拟方法 = 可覆盖>
    参数 画板对象 <类型 = 画板类>
    {
      父对象.当_绘制组件时 (画板对象)// 调用基础类中的被覆盖虚拟方法
      画板对象.填充颜色 (颜色类.红色)
      变量 临时画笔 <类型 = 画笔类 折叠2 颜色 = 0xFF00E080 笔划类型 = 填充>

      画板对象.画圆 (取宽度 () / 2, 取高度 () / 2, 数学运算类.取较小整数 (取宽度 () / 2, 取高度 () / 2), 临时画笔)


    }

    方法 当_测量尺寸时 <公开 注释 = "模式有三种:" 注释 = "    1.尺寸类型_未指定模式" 注释 = "    2.尺寸类型_精确模式" 注释 = "    3.尺寸类型_内容模式" 注释 = ""
            注释 = "根据测量后决定绘制组件宽高方法:" 注释 = "    设置测量最终尺寸()" 折叠 折叠2 @虚拟方法 = 可覆盖>
    参数 宽模式 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getMode (widthMeasureSpec)">
    参数 高模式 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getMode (heightMeasureSpec)">
    参数 宽度值 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getSize (widthMeasureSpec)">
    参数 高度值 <类型 = 整数 注释 = "android.view.View.MeasureSpec.getSize (heightMeasureSpec)">
    {
      父对象.当_测量尺寸时 (宽模式, 高模式, 宽度值, 高度值)// 调用基础类中的被覆盖虚拟方法
      调试输出2 (取源方法名 (), 宽度值, 高度值)

      设置测量最终尺寸 (200, 200)// ✅ 必须传参




    }
}

#
#
#

创世魂 发表于 2025-12-19 20:06:53

红色是什么 发表于 2025-12-19 18:39
可惜AI只能写简单的

AI的数据库里面没有火山的数据。肯定是只能写简单的东西。。
页: [1]
查看完整版本: 试试,火山论坛的表格代码预览功能