blockly-android模块化/可视化编程(二)——深入理解


首先我们看一下两个依赖分别是什么作用:
        blocklylib-core    核心库。可以运行没有UI(例如,用于代码操作和生成)的情况下运行Blockly所需的所有内容
        blocklylib-vertical    此模块包含VerticalBlockViewFactory Blockly的默认垂直堆叠块的视觉样式


然后我们进入我们目前已知的唯一类AbstractBlocklyActivity,看看它有什么重要的线索。

在我们集成时发现,即便我们没有重写Activity的onCreate方法设置布局,我们依然可以正常显示。

我们先看一下AbstractBlocklyActivity的 onCreate方法做了些什么

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        onCreateActivityRootView();
        mBlocklyActivityHelper = onCreateActivityHelper();
        if (mBlocklyActivityHelper == null) {
            throw new IllegalStateException("BlocklyActivityHelper is null. "
                    + "onCreateActivityHelper must return a instance.");
        }

        resetBlockFactory();  // Initial load of block definitions, extensions, and mutators.
        configureCategoryFactories();  // After BlockFactory; before Toolbox
        reloadToolbox();

        // Load the workspace.
        boolean loadedPriorInstance = checkAllowRestoreBlocklyState(savedInstanceState)
                && (getController().onRestoreSnapshot(savedInstanceState) || onAutoload());
        if (!loadedPriorInstance) {
            onLoadInitialWorkspace();
        }
    }



我们发现,它除了通过onCreateActivityRootView方法加载布局外,还有一些初始化、配置、加载工具箱和工作空间等操作。

在onCreateActivityRootView方法中,添加了DrawerLayout和ActionBar。重点是调用了一个onCreateContentView来实现了主要布局的加载:
    protected View onCreateContentView(int containerId) {
        return getLayoutInflater().inflate(R.layout.blockly_unified_workspace, null);
    }



这个布局就是我们没有重新设置布局而加载的默认布局,当然,我们可以自己定义需要的布局样式

通过R.layout.blockly_unified_workspace布局文件,我们可以搞明白整个布局由哪几部分组成




由4个Fragment和4个按钮组成


如下图分别是展开toolbox和trash的截图:




看完整个AbstractBlocklyActivity类,我们会发现大部分操作都被BlocklyActivityHelper贯穿。
BlocklyActivityHelper可以让Activity方便的控制Blockly,它可以让我们在工作空间中包含一些按钮来控制工作空间的缩放与重置、删除块等操作。


构造方法如下:

   public BlocklyActivityHelper(AppCompatActivity activity, FragmentManager fragmentManager) {
        mActivity = activity;

        //初始化组成界面的4个Fragment
        onFindFragments(fragmentManager);
        if (mWorkspaceFragment == null) {
            throw new IllegalStateException("mWorkspaceFragment is null");
        }

        //初始化工作空间、块View工厂、代码生成器、加载默认的xml文件
        mWorkspaceHelper = new WorkspaceHelper(activity);
        mBlockViewFactory = onCreateBlockViewFactory(mWorkspaceHelper);
        mClipDataHelper = onCreateClipDataHelper();
        mCodeGeneratorManager = new CodeGeneratorManager(activity);

        //配置控制器
        BlocklyController.Builder builder = new BlocklyController.Builder(activity)
                .setClipDataHelper(mClipDataHelper)
                .setWorkspaceHelper(mWorkspaceHelper)
                .setBlockViewFactory(mBlockViewFactory)
                .setWorkspaceFragment(mWorkspaceFragment)
                .setTrashUi(mTrashBlockList)
                .setToolboxUi(mToolboxBlockList, mCategoryFragment);
        mController = builder.build();

        //设置参数回调与变量监听
        onCreateVariableCallback();
        onCreateMutatorListener();

        //配置缩放、重置位置、垃圾桶按钮
        onConfigureTrashIcon();
        onConfigureZoomInButton();
        onConfigureZoomOutButton();
        onConfigureCenterViewButton();
    }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值