Auto Shape:一笔绘制图形

  • Android

更新时间不可用

适用于 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 依赖;已有该依赖的工程可复用:

gradle
dependencies {
    implementation 'com.google.code.gson:gson:2.10.1'
}

将下面的业务自定义类保存为独立的 AutoShapeMemberState.java 文件,并放入应用包中。setAutoShape 是这个业务类的方法。

Java
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;
    }
}

在入房成功、插件就绪后调用:

Java
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

Java
AutoShapeMemberState state = new AutoShapeMemberState();
state.setAutoShape(false);
room.setMemberState(state);

关闭时显式提交 false;创建不含该字段的普通 MemberState 不会自动清除此前设置。SDK 返回的基础 MemberState 没有 autoShape getter,业务工具栏自行记录开关状态。

类与字段保留

使用顶层类或静态嵌套类,避免匿名类或方法中的局部类被 Gson 忽略。开启 R8/ProGuard 时保留业务扩展类及字段;下面包名应替换为实际包名:

proguard
-keep class com.example.whiteboard.AutoShapeMemberState { *; }

这是一种业务模型扩展方式,使用 SDK 现有 Native 方法;本版没有内置 Auto Shape 开关方法。开启后可在 Android 白板视图中书写并确认识别效果。