使用石版印刷的2D可滚动列表/平移功能?

时间:2019-02-26 13:13:47

标签: android litho

我想知道我们是否可以使用石印来创建2D滚动列表?我尝试了嵌套的RecyclerCollectionComponents,但它使列分别滚动,而不是我想要的平移功能。我也尝试过GridRecyclerConfiguration,但它只能垂直滚动。我还希望控制每个列中的项目数和每个项目的高度。任何有关如何实现这一目标的指针将不胜感激。

我尝试过的事情:

 final Component component =
                RecyclerCollectionComponent.create(context)
                        .disablePTR(true)
                        .section(ListSection.create(new SectionContext(context)).build())
                        .recyclerConfiguration(new ListRecyclerConfiguration(
                                LinearLayoutManager.HORIZONTAL, false ))
                                .build();

        return LithoView.create(context, component);

RecyclerView组件

@LayoutSpec
public class RecyclerViewSpec {

    @OnCreateLayout
    static Component onCreateLayout(
            final ComponentContext c) {
        return RecyclerCollectionComponent.create(c)
                .section(ListSection.create(new SectionContext(c)).build())
                .build();
    }
}

上面RecyclerView的部分,其中包含嵌套的RecyclerViews

@GroupSectionSpec
public class ListSectionSpec {

    private static List<Integer> generateData(int count) {
        final List<Integer> data = new ArrayList<>(count);
        for (int i = 0; i < count; i++) {
            data.add(i);
        }
        return data;
    }

    @OnEvent(RenderEvent.class)
    static RenderInfo onRender(final SectionContext c, @FromEvent Integer model) {
        return ComponentRenderInfo.create()
                .component(
                        ListItem.create(c)
                                .color(model % 2 == 0 ? Color.WHITE : Color.LTGRAY)
                                .title(model + ". Hello, world!")
                                .subtitle("Litho tutorial")
                                .build())
                .build();
    }

    @OnCreateChildren
    static Children onCreateChildren(final SectionContext c) {
        Children.Builder builder = Children.create();

        for (int i = 0; i < 32; i++) {
            builder.child(
                    SingleComponentSection.create(c)
                            .key(String.valueOf(i))
                            .component(RecyclerCollectionComponent.create(c)
                                    .disablePTR(true)
                                    .section(
                                            DataDiffSection.<Integer>create(c)
                                                    .data(generateData(32))
                                                    .renderEventHandler(ListSection.onRender(c))
                                                    .build())
                                    .canMeasureRecycler(true)));
        }

        return builder.build();
    }
}

个人列表项

@LayoutSpec
public class ListItemSpec {

    @OnCreateLayout
    static Component onCreateLayout(
            ComponentContext c,
            @Prop int color,
            @Prop String title,
            @Prop String subtitle) {

        return Column.create(c)
                .paddingDip(ALL, 16)
                .backgroundColor(color)
                .child(
                        Text.create(c)
                                .text(title)
                                .textSizeSp(40))
                .child(
                        Text.create(c)
                                .text(subtitle)
                                .textSizeSp(20))
                .build();
    }
}

这将创建一个水平滚动的列表,而各个列则垂直滚动。我想要一个可以在任何方向平移的表面。

1 个答案:

答案 0 :(得分:0)

如果您能弄清楚如何在标准android系统中执行此操作,则可以使用相同的原理使其在Litho中工作(例如,使用与标准android中相同的LayoutManager)。 AFAIK,这在标准android中并不是一件容易的事。