Auto Shape:一笔绘制图形
适用于 Whiteboard Android SDK 2.16.134,内嵌 Appliance Plugin 1.1.45。本章的 Version 条件指插件版本。
Auto Shape:一笔绘制图形
Auto Shape(Version ≥1.1.33)将一笔完成的铅笔笔迹识别为规则图形。用户继续使用 Pencil 绘制,抬手时完成识别;无法识别时保留普通铅笔笔迹。
支持的图形
- 直线、箭头。
- 矩形、椭圆或圆形。
- 三角形、菱形、五角星。
闭合图形尽量一笔闭合。识别针对当前完成的一笔,不会批量转换历史笔迹。
Native Android 开启方式
先按教具插件介绍开启 useMultiViews、enableAppliancePlugin,加入可写房间,在插件初始化完成后设置教具状态。
2.16.134 的 SDK MemberState 没有内置 setAutoShape。可以在应用中定义 MemberState 子类,增加插件已支持的 autoShape 布尔字段,再使用公开的 room.setMemberState(...) 提交。
示例使用 Gson 的 @SerializedName 固定 JSON 字段名。在应用模块的 build.gradle 中声明 Gson 依赖;已有该依赖的工程可复用:
dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
}
将下面的业务自定义类保存为独立的 AutoShapeMemberState.java 文件,并放入应用包中。setAutoShape 是这个业务类的方法。
import com.google.gson.annotations.SerializedName;
import com.herewhite.sdk.domain.MemberState;
public class AutoShapeMemberState extends MemberState {
@SerializedName("autoShape")
private Boolean autoShape;
public void setAutoShape(boolean enabled) {
this.autoShape = enabled;
}
}
在入房成功、插件就绪后调用:
import com.herewhite.sdk.domain.Appliance;
import com.herewhite.sdk.domain.StrokeType;
AutoShapeMemberState state = new AutoShapeMemberState();
state.setCurrentApplianceName(Appliance.PENCIL);
state.setStrokeType(StrokeType.Normal);
state.setStrokeColor(new int[]{32, 102, 255});
state.setStrokeWidth(4);
state.setAutoShape(true);
room.setMemberState(state);
SDK 会把子类字段和继承字段一起序列化,autoShape 以布尔值传给内嵌插件。用户仍然在 Android 白板视图中使用铅笔绘制。
关闭 Auto Shape
AutoShapeMemberState state = new AutoShapeMemberState();
state.setAutoShape(false);
room.setMemberState(state);
关闭时显式提交 false;创建不含该字段的普通 MemberState 不会自动清除此前设置。SDK 返回的基础 MemberState 没有 autoShape getter,业务工具栏自行记录开关状态。
类与字段保留
使用顶层类或静态嵌套类,避免匿名类或方法中的局部类被 Gson 忽略。开启 R8/ProGuard 时保留业务扩展类及字段;下面包名应替换为实际包名:
-keep class com.example.whiteboard.AutoShapeMemberState { *; }
这是一种业务模型扩展方式,使用 SDK 现有 Native 方法;本版没有内置 Auto Shape 开关方法。开启后可在 Android 白板视图中书写并确认识别效果。