自定义教具与样式

  • Android

更新时间不可用

适用于 Fastboard Android 1.8.2。本页通过 Fastboard 公开的原生 SDK 对象配置教具插件。

在创建 FastRoom 前通过 FastRoomOptions.getSdkConfiguration() 与 getRoomParams() 设置配置。下面的 fastRoomOptions 为业务创建的房间选项。

Java
import com.herewhite.sdk.WhiteSdkConfiguration;
import com.herewhite.sdk.RoomParams;

WhiteSdkConfiguration config = fastRoomOptions.getSdkConfiguration();
config.setUseMultiViews(true);
config.setEnableAppliancePlugin(true);
RoomParams params = fastRoomOptions.getRoomParams();

入房成功后,通过 Fastboard 的公开 getter 获取下文使用的 Native 对象:

Java
import com.herewhite.sdk.Room;
import com.herewhite.sdk.WhiteSdk;

Room room = fastRoom.getRoom();
WhiteSdk whiteSdk = fastRoom.getWhiteSdk();

下文的 params、config 指 FastRoomOptions 返回的配置;通过 Fastboard 创建 SDK 和加入房间。

教具配置分为两类:通过教具状态设置当前用户的绘图样式,通过 appliancePluginOptions.extras 设置本地插件的样式与交互选项。先按插件介绍完成启用,再在入房前填写插件选项。

Selector 与属性栏

Java
import com.herewhite.sdk.domain.Appliance;
import com.herewhite.sdk.domain.MemberState;

// 入房前开启内置属性栏。
params.setUsingFloatBar(true);
// 入房成功后切换选择工具。
MemberState selector = new MemberState();
selector.setCurrentApplianceName(Appliance.SELECTOR);
room.setMemberState(selector);

内置 Selector 提供选中、移动和缩放交互。单独选中一张未锁定、支持旋转的图片时可使用左下角旋转手柄。属性栏由本端本地显示,其元素属性修改通过房间同步。

插件 extras.overwriteSelectorStyles 支持以下选择框样式:

字段作用
highlightBox选择框外框
highlightBoxPoint普通缩放控制点
highlightBoxPoints按 LT/LC/LB/TC/RT/RC/RB/BC 方向覆盖控制点
highlightBoxPointDot端点编辑控制点
highlightBoxLock锁定图标
表格内容超出当前宽度,可横向滚动查看更多列。

Extras 配置

Java
import java.util.HashMap;
import java.util.Map;
import com.herewhite.sdk.domain.AppliancePluginOptions;

Map<String, Object> box = new HashMap<>();
box.put("borderWidth", 2);
box.put("borderStyle", "dashed");
box.put("borderColor", "#1677ff");
Map<String, Object> selectorStyles = new HashMap<>();
selectorStyles.put("highlightBox", box);

Map<String, Object> dotted = new HashMap<>();
dotted.put("lineCap", "round");
dotted.put("segment", 1);
dotted.put("gap", 2);
Map<String, Object> extras = new HashMap<>();
extras.put("overwriteSelectorStyles", selectorStyles);
extras.put("dottedStroke", dotted);

AppliancePluginOptions pluginOptions = new AppliancePluginOptions();
pluginOptions.setExtras(extras);
params.setAppliancePluginOptions(pluginOptions);

Map<String, Object> 按相同字段名序列化到 appliancePluginOptions.extras,以上配置在入房前设置。短虚线配置在教具状态选择 StrokeType.Dotted 时使用。

插件画笔样式配置包括 normalStroke、dottedStroke 和 longDottedStroke。lineCap 为 round 或 square;虚线的 segment/gap 决定段长和间隔,间隔按笔宽换算。1.1.44 默认短虚线、长虚线均配置 segment=1/gap=2,端点为 round;业务可按需要分别覆盖。

Pencil 与 Shape

Java
import com.herewhite.sdk.domain.Appliance;
import com.herewhite.sdk.domain.MemberState;
import com.herewhite.sdk.domain.StrokeType;

MemberState dottedPencil = new MemberState();
dottedPencil.setCurrentApplianceName(Appliance.PENCIL);
dottedPencil.setStrokeType(StrokeType.Dotted);
dottedPencil.setStrokeColor(new int[]{32, 102, 255});
dottedPencil.setStrokeWidth(4);
dottedPencil.setStrokeOpacity(0.6);
room.setMemberState(dottedPencil);

StrokeType.Normal/Stroke/Dotted/LongDotted 对应实线、笔锋、短虚线和长虚线;strokeOpacity 为线条透明度。后续需要实线时显式恢复 StrokeType.Normal。

Java
import com.herewhite.sdk.domain.MemberState;
import com.herewhite.sdk.domain.ShapeType;

MemberState triangle = new MemberState();
triangle.setShapeType(ShapeType.Triangle);
triangle.setStrokeColor(new int[]{32, 102, 255});
triangle.setStrokeWidth(3);
triangle.setFillColor(new int[]{255, 220, 100});
triangle.setFillOpacity(0.4);
room.setMemberState(triangle);

本版 ShapeType 提供 Triangle/Rhombus/Pentagram/SpeechBalloon。填充色和透明度通过 setFillColor/setFillOpacity 设置。

Native 教具状态字段

字段Android 配置方法
当前教具MemberState.setCurrentApplianceName(...)
线条颜色、粗细setStrokeColor(...)、setStrokeWidth(...)
线型、线条透明度setStrokeType(...)、setStrokeOpacity(...)
图形类型setShapeType(...)
填充颜色、透明度setFillColor(...)、setFillOpacity(...)
文字颜色、字号setTextColor(...)、setTextSize(...)
橡皮尺寸setPencilEraserSize(...),本端字段范围为 1~3
表格内容超出当前宽度,可横向滚动查看更多列。

将状态传给 room.setMemberState(...)。未设置的可选字段不会作为新值提交,业务切换工具时显式恢复需要重置的样式。

内嵌插件还读取 autoShape 等扩展字段。对于本版 MemberState 未内置的字段,可在业务中定义命名的子类,通过同一个 Native room.setMemberState(...) 提交;类定义、开启和关闭示例见 Auto Shape。扩展字段需使用插件实际接受的名称和类型,并保留其 JSON 序列化字段。

自定义 Native 工具栏

应用可使用 Android View 或 Compose 编写教具切换和样式设置面板,调用以上 Native 方法;复制、删除、撤销和重做分别使用 room.copy()、room.delete()、room.undo() 和 room.redo()。

自定义工具栏通过 MemberState 控制当前用户的教具与样式;内置 Selector 和属性栏负责选中元素的交互。

完整签名见客户端 API。