自定义教具与样式
适用于 Fastboard Android 1.8.2。本页通过 Fastboard 公开的原生 SDK 对象配置教具插件。
在创建 FastRoom 前通过 FastRoomOptions.getSdkConfiguration() 与 getRoomParams() 设置配置。下面的 fastRoomOptions 为业务创建的房间选项。
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 对象:
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 与属性栏
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 配置
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
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。
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。