@NonNull private DividerItemDecoration getDivider() { Drawable dividerBackground = ContextCompat.getDrawable(getActivity(), R.drawable.dark_blue_divider); Collection<Layer> layers = LayersBuilder.with( new Layer(DividerBuilder.from(dividerBackground).erase(Direction.getVertical()).build()), new Layer(new HeaderSelector(), DividerBuilder.fromEmpty().with(dividerBackground, Direction.SOUTH).build())).build(); return new DividerItemDecoration(layers); }
@Test public void shouldDrawOneCorner() { givenThatThereIsOneCellToRender(); Drawable drawableMock = mock(Drawable.class); when(drawableMock.mutate()).thenReturn(drawableMock); List<Layer> layers = getSingleCornerDrawableLayer(drawableMock); dividerItemDecoration = new DividerItemDecoration(layers); dividerItemDecoration.onDrawOver(canvasMock, recyclerViewMock, recyclerViewStateMock); verify(drawableMock).draw(Matchers.eq(canvasMock)); }
@Override public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) { if (positionAdapter == null) { positionAdapter = new PositionAdapter(parent.getLayoutManager(), offset); } int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); int absolutePosition = parent.getChildAdapterPosition(child); Position position = positionAdapter.getPositionByIndex(absolutePosition); Divider divider = dividerMap.getDivider(position, positionAdapter); drawDivider(canvas, child, divider, position); } }
@Test public void shouldDrawAllEightAreasForADrawable() { givenThatThereIsOneCellToRender(); Drawable drawableMock = mock(Drawable.class); when(drawableMock.mutate()).thenReturn(drawableMock); List<Layer> layers = getSingleDrawableLayer(drawableMock); dividerItemDecoration = new DividerItemDecoration(layers); dividerItemDecoration.onDrawOver(canvasMock, recyclerViewMock, recyclerViewStateMock); verify(drawableMock, times(8)).draw(Matchers.eq(canvasMock)); }
@Test public void shouldOverrideCornerWhenTwoLayersCollide() { givenThatThereIsOneCellToRender(); Drawable drawableMock = mock(Drawable.class); Drawable overrideDrawableMock = mock(Drawable.class); when(drawableMock.mutate()).thenReturn(drawableMock); when(overrideDrawableMock.mutate()).thenReturn(overrideDrawableMock); List<Layer> layers = getSingleCornerDrawableLayer(drawableMock); layers.addAll(getSingleCornerDrawableLayer(overrideDrawableMock)); dividerItemDecoration = new DividerItemDecoration(layers); dividerItemDecoration.onDrawOver(canvasMock, recyclerViewMock, recyclerViewStateMock); verify(overrideDrawableMock).draw(Matchers.eq(canvasMock)); }
@NonNull private DividerItemDecoration getDivider() { Drawable dividerBackground = ContextCompat.getDrawable(getActivity(), R.drawable.dark_blue_divider); Collection<Layer> layers = LayersBuilder.with( new Layer(DividerBuilder.from(dividerBackground).erase(Direction.getVertical()).build()), new Layer(new HeaderSelector(), DividerBuilder.fromEmpty().with(dividerBackground, Direction.SOUTH).build())).build(); return new DividerItemDecoration(layers); }
private RecyclerView.ItemDecoration getItemDecoration() { Drawable blackDrawable = getResources().getDrawable(R.drawable.black_divider); Drawable greyDrawable = getResources().getDrawable(R.drawable.grey_divider); Collection<Layer> layers = LayersBuilder.with( new Layer(new AllItemsSelector(), DividerBuilder.get().with(greyDrawable).build()), new Layer(new EvenCellRowSelector(), DividerBuilder.get().with(blackDrawable).build())) .build(); return new DividerItemDecoration(layers); } }
private RecyclerView.ItemDecoration getItemDecoration(List<Movie> movies) { Drawable darkDrawable = getResources().getDrawable(R.drawable.movies_dark_divider); Drawable lightDrawable = getResources().getDrawable(R.drawable.movies_light_divider); Drawable highlightedDrawable = getResources().getDrawable(R.drawable.movies_highlight_divider); Layer defaultLayer = new Layer(DividerBuilder.from(lightDrawable).build()); Layer externalLayer = new Layer( new AllGroupSelector(), DividerBuilder.from(darkDrawable).build()); Layer highRatedLayer = new Layer( new HighRatingMovieSelector(movies, HIGH_RATING_THRESHOLD), DividerBuilder.from(highlightedDrawable).build()); Collection<Layer> layers = LayersBuilder.with(defaultLayer, externalLayer, highRatedLayer).build(); return new DividerItemDecoration(layers); } }