日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

渲染卡片

本文介紹了在 Android 客戶端渲染卡片的整體實現流程。

渲染卡片的流程分為四部分,第一步,組裝卡片配置信息;第二步,根據配置信息請求卡片,獲取到卡片實例;第三步,通過卡片實例,使用卡片 View 去渲染;第四步,在整個業務完成后,在 destroy聲明周期中,釋放卡片。具體流程如下:

  1. 組裝卡片配置信息。

    創建配置信息,并設置各種參數。更多參數請參見 接口說明

    /**
     * 組裝卡片配置信息
     * @return
     */
    private CubeCardConfig assembleCubeCardConfig(){
        // 創建卡片配置
        CubeCardConfig cardConfig = new CubeCardConfig();
        // 后臺創建的卡片ID
        cardConfig.setTemplateId("hello_cube");
        // 卡片版本
        cardConfig.setVersion("1.0.0.0");
        // 卡片寬度,這里選取屏幕寬度
        cardConfig.setWidth(MFSystemInfo.getPortraitScreenWidth());
        return cardConfig;
    }
  2. 請求卡片。

    根據組裝好的卡片配置信息,請求卡片。卡片引擎會去服務端獲取卡片模板信息,可以使用 createCard方法一次請求一個卡片,也可以使用 createCards方法一次請求多個卡片。

    /**
     * 請求卡片信息
     * @param cardConfig
     */
    private void requestCubeCard(final CubeCardConfig cardConfig){
        // 創建卡片信息
        CubeService.instance().getEngine().createCard(cardConfig, new CCardCallback() {
            @Override
            public void onLoaded(final CubeCard cubeCard, CCardType cardType, CubeCardConfig cubeCardConfig, CubeCardResultCode resultCode) {
                renderCubeCard(cubeCard,cardType,cubeCardConfig,resultCode);
            }
        });
    }
  3. 渲染卡片。

    獲取到卡片信息后,生成卡片 View,在主線程中進行渲染。這一步也要做異常判斷,防止未順利獲取到卡片信息的情況發生。

    /**
     * 渲染卡片
     * @param cubeCard
     * @param cardType
     * @param cubeCardConfig
     * @param resultCode
     */
    private void renderCubeCard(final CubeCard cubeCard, CCardType cardType, CubeCardConfig cubeCardConfig, CubeCardResultCode resultCode) {
        if (resultCode == CubeCardResultCode.CubeCardResultSucc) {
            // 需要運行在主線程
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mCard = cubeCard;
                    // 創建卡片View
                    CubeView view = CubeService.instance().getEngine().createView(FastActivity.this);
                    // 添加到外層 ViewGroup 里
                    mWrapperLl.addView(view);
                    // 渲染卡片
                    cubeCard.renderView(view);
                }
            });
            MPLogger.info(TAG, "succ " + cubeCardConfig.getTemplateId() + " style " + cardType);
        } else {
            MPLogger.info(TAG, "fail " + cubeCardConfig.getTemplateId() + " style " + cardType + " error " + resultCode);
        }
    }
  4. 釋放卡片。

    卡片使用完成之后,釋放卡片的內存資源,通常是在頁面的 onDestroy生命周期里調用。

    /**
     * 釋放卡片資源
     */
    private void releaseCubeCard(){
        if (mCard != null) {
            mCard.recycle();
        }
        int chidrenCount = mWrapperLl.getChildCount();
        for (int i = 0; i < chidrenCount; i++) {
            if (mWrapperLl.getChildAt(i) instanceof CubeView) {
                ((CubeView) mWrapperLl.getChildAt(i)).destroy();
            }
        }
        mWrapperLl.removeAllViews();
    }