I am going to show you a simple implementation of an item decorator which fills the item and also draws a boarder.
Complete example can be found at https://github.com/trsquarelab/androidexamples/tree/master/RecycleViewExample
package com.example.recycleviewexample;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import java.util.Random;
/**
* A simple item decorator which will,
* 1. Fill the item view with a Random color from ColorList
* 2. Draw a dark Gray coloured boarder
*/
public class SimpleItemDecorator extends RecyclerView.ItemDecoration {
private Paint mPaintFill; // This Paint object is used for filling the view
private Paint mPaintStroke; // This Paint object is used for drawing the boarder
private Random mRandom = new Random();
// Item view will be filled with one of the below given colour
// which is selected randomly
private static final int[] ColorList = {
Color.RED,
Color.GREEN,
Color.BLUE,
Color.YELLOW,
Color.CYAN,
Color.MAGENTA,
Color.GRAY};
public SimpleItemDecorator(Context context) {
// Create the fill paint
mPaintFill = new Paint();
mPaintFill.setStyle(Paint.Style.FILL);
// Create the stroke paint
mPaintStroke = new Paint();
mPaintStroke.setStyle(Paint.Style.STROKE);
mPaintStroke.setStrokeWidth(5.0f);
mPaintStroke.setColor(Color.DKGRAY);
// Set seed for random number generator
mRandom.setSeed(System.currentTimeMillis());
}
// This method is called before the item view is rendered
// This method will be used for filling the item view
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getChildCount();
// For each child view we would need to calculate the
// bounds and fill it by drawing a rectangle
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
// Get the bounds
RectF rect = getBounds(child);
// Set a random color
mPaintFill.setColor(ColorList[mRandom.nextInt(ColorList.length)]);
// Fill the view by drawing a rectangle with rounded corner
c.drawRoundRect (rect, 20, 20, mPaintFill);
}
}
// This method is called after the item view is rendered
// This method will be used for drawing the boarder
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getChildCount();
// For each child view we would need to calculate the
// bounds and fill it by drawing a rectangle
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
// Get the bounds
RectF rect = getBounds(child);
// Fill the view by drawing a rectangle with rounded corner
c.drawRoundRect (rect, 10, 10, mPaintStroke);
}
}
// Calculate the bounds for a child
private RectF getBounds(View child) {
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int left = child.getPaddingLeft();
int right = child.getWidth() - child.getPaddingRight();
int top = child.getTop() - params.topMargin;
int bottom = child.getBottom() + params.bottomMargin;
return new RectF(left, top, right, bottom);
}
}
Complete example can be found at https://github.com/trsquarelab/androidexamples/tree/master/RecycleViewExample
Hello Mate,
ReplyDeleteI learnt so much in such little time about A simple implementationof item decorator for RecyclerView Even a toddler could become smart reading of your amazing articles.
Could someone explain this code step by step:
Code:
#include
#define MAX 10
int main()
{
char array[MAX][MAX], c = 0;
int d = 1, x = 0, i, j;
do scanf("%s", array[x]);
while (array[x++][0] != '0');
{
float* pf;
int xx, *pi = (int*)&array[0][7];
xx = ((*pi) & 0x41000000);
pf = (float*)&xx;
printf("%5.2f\n", *pf);
}
for (c-=--x; c++&**array; d+=!(c<0)) d<<=1;
d -= c;
for (i = 0; i < x;
i==1?printf("%c ", array[i][x>>1]):i, ++i)
for (j = 0; j <= x - i;
printf("%c", array[i][j++]));
printf("%x", d);
return 0;
}
By the way do you have any YouTube videos, would love to watch it. I would like to connect you on LinkedIn, great to have experts like you in my connection (In case, if you don’t have any issues).
Best Regards,
Irene Hynes