Search in sources :

Example 1 with FixAreaLayoutHelper

use of com.alibaba.android.vlayout.layout.FixAreaLayoutHelper in project Tangram-Android by alibaba.

the class Card method getLayoutHelper.

@Nullable
public final LayoutHelper getLayoutHelper() {
    LayoutHelper helper = convertLayoutHelper(mLayoutHelper);
    // bind style to helper
    if (style != null && helper != null) {
        helper.setZIndex(style.zIndex);
        if (helper instanceof BaseLayoutHelper) {
            BaseLayoutHelper baseHelper = (BaseLayoutHelper) helper;
            baseHelper.setBgColor(style.bgColor);
            if (!TextUtils.isEmpty(style.bgImgUrl)) {
                if (serviceManager != null && serviceManager.getService(CardSupport.class) != null) {
                    final CardSupport support = serviceManager.getService(CardSupport.class);
                    baseHelper.setLayoutViewBindListener(new BindListener(style) {

                        @Override
                        public void onBind(View layoutView, BaseLayoutHelper baseLayoutHelper) {
                            support.onBindBackgroundView(layoutView, Card.this);
                        }
                    });
                    baseHelper.setLayoutViewUnBindListener(new UnbindListener(style) {

                        @Override
                        public void onUnbind(View layoutView, BaseLayoutHelper baseLayoutHelper) {
                            support.onUnbindBackgroundView(layoutView, Card.this);
                        }
                    });
                } else {
                    baseHelper.setLayoutViewBindListener(new BindListener(style));
                    baseHelper.setLayoutViewUnBindListener(new UnbindListener(style));
                }
            } else {
                baseHelper.setLayoutViewBindListener(null);
                baseHelper.setLayoutViewUnBindListener(null);
            }
            if (!Float.isNaN(style.aspectRatio)) {
            // ((BaseLayoutHelper) helper).setAspectRatio(style.aspectRatio);
            }
        }
        if (helper instanceof FixAreaLayoutHelper) {
            FixAreaLayoutHelper fixHelper = (FixAreaLayoutHelper) helper;
            boolean hasCustomAnimatorHelper = false;
            if (serviceManager != null && serviceManager.getService(CardSupport.class) != null) {
                CardSupport support = serviceManager.getService(CardSupport.class);
                FixAreaLayoutHelper.FixViewAnimatorHelper viewAnimatorHelper = support.onGetFixViewAppearAnimator(Card.this);
                if (viewAnimatorHelper != null) {
                    hasCustomAnimatorHelper = true;
                    fixHelper.setFixViewAnimatorHelper(viewAnimatorHelper);
                }
            }
            if (!hasCustomAnimatorHelper) {
                final int duration = style.extras != null ? style.extras.optInt(Style.KEY_ANIMATION_DURATION) : 0;
                if (duration > 0) {
                    fixHelper.setFixViewAnimatorHelper(new FixAreaLayoutHelper.FixViewAnimatorHelper() {

                        @Override
                        public ViewPropertyAnimator onGetFixViewAppearAnimator(View fixView) {
                            int height = fixView.getMeasuredHeight();
                            fixView.setTranslationY(-height);
                            return fixView.animate().translationYBy(height).setDuration(duration);
                        }

                        @Override
                        public ViewPropertyAnimator onGetFixViewDisappearAnimator(View fixView) {
                            int height = fixView.getMeasuredHeight();
                            return fixView.animate().translationYBy(-height).setDuration(duration);
                        }
                    });
                }
            }
        }
        if (helper instanceof MarginLayoutHelper) {
            ((MarginLayoutHelper) helper).setMargin(style.margin[Style.MARGIN_LEFT_INDEX], style.margin[Style.MARGIN_TOP_INDEX], style.margin[Style.MARGIN_RIGHT_INDEX], style.margin[Style.MARGIN_BOTTOM_INDEX]);
            ((MarginLayoutHelper) helper).setPadding(style.padding[Style.MARGIN_LEFT_INDEX], style.padding[Style.MARGIN_TOP_INDEX], style.padding[Style.MARGIN_RIGHT_INDEX], style.padding[Style.MARGIN_BOTTOM_INDEX]);
        }
    }
    if (mRetainLayout) {
        mLayoutHelper = helper;
    }
    return helper;
}
Also used : MarginLayoutHelper(com.alibaba.android.vlayout.layout.MarginLayoutHelper) FixAreaLayoutHelper(com.alibaba.android.vlayout.layout.FixAreaLayoutHelper) ImageView(android.widget.ImageView) View(android.view.View) ViewPropertyAnimator(android.view.ViewPropertyAnimator) CardSupport(com.tmall.wireless.tangram.support.CardSupport) BaseLayoutHelper(com.alibaba.android.vlayout.layout.BaseLayoutHelper) LayoutHelper(com.alibaba.android.vlayout.LayoutHelper) MarginLayoutHelper(com.alibaba.android.vlayout.layout.MarginLayoutHelper) FixAreaLayoutHelper(com.alibaba.android.vlayout.layout.FixAreaLayoutHelper) BaseLayoutHelper(com.alibaba.android.vlayout.layout.BaseLayoutHelper) Nullable(android.support.annotation.Nullable)

Example 2 with FixAreaLayoutHelper

use of com.alibaba.android.vlayout.layout.FixAreaLayoutHelper in project vlayout by alibaba.

the class VirtualLayoutManager method setLayoutHelpers.

/**
     * Update layoutHelpers, data changes will cause layoutHelpers change
     *
     * @param helpers group of layoutHelpers
     */
public void setLayoutHelpers(@Nullable List<LayoutHelper> helpers) {
    for (LayoutHelper helper : mHelperFinder) {
        oldHelpersSet.put(System.identityHashCode(helper), helper);
    }
    // set ranges
    if (helpers != null) {
        int start = 0;
        for (int i = 0; i < helpers.size(); i++) {
            LayoutHelper helper = helpers.get(i);
            if (helper instanceof FixAreaLayoutHelper) {
                ((FixAreaLayoutHelper) helper).setAdjuster(mFixAreaAdjustor);
            }
            if (helper instanceof BaseLayoutHelper && mLayoutViewBindListener != null) {
                ((BaseLayoutHelper) helper).setLayoutViewBindListener(mLayoutViewBindListener);
            }
            if (helper.getItemCount() > 0) {
                helper.setRange(start, start + helper.getItemCount() - 1);
            } else {
                helper.setRange(-1, -1);
            }
            start += helper.getItemCount();
        }
    }
    this.mHelperFinder.setLayouts(helpers);
    for (LayoutHelper helper : mHelperFinder) {
        newHelpersSet.put(System.identityHashCode(helper), helper);
    }
    for (Iterator<Map.Entry<Integer, LayoutHelper>> it = oldHelpersSet.entrySet().iterator(); it.hasNext(); ) {
        Map.Entry<Integer, LayoutHelper> entry = it.next();
        Integer key = entry.getKey();
        if (newHelpersSet.containsKey(key)) {
            newHelpersSet.remove(key);
            it.remove();
        }
    }
    for (LayoutHelper helper : oldHelpersSet.values()) {
        helper.clear(this);
    }
    if (!oldHelpersSet.isEmpty() || !newHelpersSet.isEmpty()) {
        mSpaceMeasured = false;
    }
    oldHelpersSet.clear();
    newHelpersSet.clear();
    requestLayout();
}
Also used : FixAreaLayoutHelper(com.alibaba.android.vlayout.layout.FixAreaLayoutHelper) DefaultLayoutHelper(com.alibaba.android.vlayout.layout.DefaultLayoutHelper) BaseLayoutHelper(com.alibaba.android.vlayout.layout.BaseLayoutHelper) FixAreaLayoutHelper(com.alibaba.android.vlayout.layout.FixAreaLayoutHelper) BaseLayoutHelper(com.alibaba.android.vlayout.layout.BaseLayoutHelper) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

BaseLayoutHelper (com.alibaba.android.vlayout.layout.BaseLayoutHelper)2 FixAreaLayoutHelper (com.alibaba.android.vlayout.layout.FixAreaLayoutHelper)2 Nullable (android.support.annotation.Nullable)1 View (android.view.View)1 ViewPropertyAnimator (android.view.ViewPropertyAnimator)1 ImageView (android.widget.ImageView)1 LayoutHelper (com.alibaba.android.vlayout.LayoutHelper)1 DefaultLayoutHelper (com.alibaba.android.vlayout.layout.DefaultLayoutHelper)1 MarginLayoutHelper (com.alibaba.android.vlayout.layout.MarginLayoutHelper)1 CardSupport (com.tmall.wireless.tangram.support.CardSupport)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1