试试,火山论坛的表格代码预览功能
本帖最后由 红色是什么 于 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();
}
#
#
}
本帖最后由 红色是什么 于 2026-7-4 23:05 编辑
<火山程序 类型 = "通常" 版本 = 1 />
类 测试用户类 <公开 基础类 = 扩展对象类 注释 = "示例测试" 折叠>
{
变量 名字 <公开 类型 = 文本型>
变量 手机号 <公开 类型 = 文本型>
#
方法 取展示内容 <公开 类型 = 文本型 注释 = "将本对象中的所有数据用文本方式返回." 注释 = "可用作\"到文本()\"方法转换对象到文本或\"调试输出2\"等其它场合展示时使用."
注释 = "" @虚拟方法 = 可覆盖>
{
返回 (名字)// 调用基础类中的被覆盖虚拟方法
}
}
类 用户数组类 <公开 基础类 = 安卓通用对象列表模板基础类 注释 = "示例测试" 折叠 @模板实现类 = "测试用户类">
{
#
}
本帖最后由 红色是什么 于 2026-4-30 21:37 编辑
<火山程序 类型 = "通常" 版本 = 1 />
方法 测试方法 <折叠>
{
变量 用户数组对象 <类型 = 用户数组类>
计次循环 (10)
{
变量 test <类型 = 测试用户类>
test.名字 = "name" + 到文本 (取循环索引 ())
test.手机号="666"
用户数组对象.加入成员 (,test )
}
调试输出2 (用户数组对象)
}
本帖最后由 红色是什么 于 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 18:39
可惜AI只能写简单的
AI的数据库里面没有火山的数据。肯定是只能写简单的东西。。
页:
[1]