package com.beloo.widget.chipslayoutmanager.layouter;
|
|
import android.graphics.Rect;
|
import android.view.View;
|
|
import androidx.annotation.NonNull;
|
|
class RightLayouter extends AbstractLayouter {
|
|
private boolean isPurged;
|
|
private RightLayouter(Builder builder) {
|
super(builder);
|
}
|
|
public static Builder newBuilder() {
|
return new Builder();
|
}
|
|
@Override
|
Rect createViewRect(View view) {
|
Rect viewRect = new Rect(viewLeft, viewTop, viewLeft + getCurrentViewWidth(), viewTop + getCurrentViewHeight());
|
|
viewBottom = viewRect.bottom;
|
viewTop = viewBottom;
|
viewRight = Math.max(viewRight, viewRect.right);
|
return viewRect;
|
}
|
|
@Override
|
boolean isReverseOrder() {
|
return false;
|
}
|
|
@Override
|
void onPreLayout() {
|
if (!rowViews.isEmpty()) {
|
//todo this isn't great place for that. Should be refactored somehow
|
if (!isPurged) {
|
isPurged = true;
|
getCacheStorage().purgeCacheFromPosition(getLayoutManager().getPosition(rowViews.get(0).second));
|
}
|
|
//cache only when go down
|
getCacheStorage().storeRow(rowViews);
|
}
|
}
|
|
@Override
|
void onAfterLayout() {
|
//go to next column, increase left coordinate, reset top
|
viewLeft = getViewRight();
|
viewTop = getCanvasTopBorder();
|
}
|
|
@Override
|
boolean isAttachedViewFromNewRow(View view) {
|
int leftOfCurrentView = getLayoutManager().getDecoratedLeft(view);
|
int topOfCurrentView = getLayoutManager().getDecoratedTop(view);
|
|
return viewRight <= leftOfCurrentView
|
&& topOfCurrentView < viewTop;
|
}
|
|
@Override
|
void onInterceptAttachView(View view) {
|
viewTop = getLayoutManager().getDecoratedBottom(view);
|
viewLeft = getLayoutManager().getDecoratedLeft(view);
|
viewRight = Math.max(viewRight, getLayoutManager().getDecoratedRight(view));
|
}
|
|
@Override
|
public int getStartRowBorder() {
|
return getViewLeft();
|
}
|
|
@Override
|
public int getEndRowBorder() {
|
return getViewRight();
|
}
|
|
@Override
|
public int getRowLength() {
|
return viewTop - getCanvasTopBorder();
|
}
|
|
public static final class Builder extends AbstractLayouter.Builder {
|
private Builder() {
|
}
|
|
@NonNull
|
public RightLayouter createLayouter() {
|
return new RightLayouter(this);
|
}
|
}
|
}
|