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;
}
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();
}
Aggregations