Android RecyclerView Grid Layout Example

activity_main.xml
 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/rl"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:padding="16dp"     tools:context=".MainActivity"     android:background="#c2dbfd"     >     <android.support.v7.widget.RecyclerView         android:id="@+id/recycler_view"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:scrollbars="vertical"         >     </android.support.v7.widget.RecyclerView> </RelativeLayout> 
custom_view.xml
 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:card_view="http://schemas.android.com/apk/res-auto"     android:id="@+id/card_view"     android:layout_width="match_parent"     android:layout_height="wrap_content"     card_view:cardCornerRadius="4dp"     card_view:cardMaxElevation="4dp"     card_view:cardElevation="2dp"     card_view:contentPadding="5dp"     >     <LinearLayout         android:id="@+id/ll"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:padding="3dp"         >         <TextView             android:id="@+id/tv"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:textColor="#000"             android:textSize="25dp"             android:textStyle="bold"             android:layout_margin="2dp"             android:padding="10dp"             android:layout_gravity="center"             android:gravity="center"             />     </LinearLayout> </android.support.v7.widget.CardView> 
MainActivity.java
 package com.cfsuman.me.androidcode;  import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Window; import android.widget.RelativeLayout;   public class MainActivity extends AppCompatActivity {     private Context mContext;      RelativeLayout mRelativeLayout;     private RecyclerView mRecyclerView;      private RecyclerView.Adapter mAdapter;     private RecyclerView.LayoutManager mLayoutManager;       @Override     protected void onCreate(Bundle savedInstanceState) {         // Request window feature action kafetaria         requestWindowFeature(Window.FEATURE_ACTION_BAR);         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          // Get the application context         mContext = getApplicationContext();          // Change the action kafetaria color         getSupportActionBar().setBackgroundDrawable(                 new ColorDrawable(Color.parseColor("#FF677589"))         );          // Get the widgets reference from XML layout         mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);         mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);          // Initialize a new String array         String[] animals = {                 "Aardvark",                 "Albatross",                 "Alligator",                 "Alpaca",                 "Ant",                 "Anteater",                 "Antelope",                 "Ape",                 "Armadillo",                 "Donkey",                 "Baboon",                 "Badger",                 "Barracuda",                 "Bear",                 "Beaver",                 "Bee"         };          /*             GridLayoutManager                 A RecyclerView.LayoutManager implementations that lays out items in a grid.                 By default, each item occupies 1 span. You can change it by providing a custom                 GridLayoutManager.SpanSizeLookup instance via setSpanSizeLookup(SpanSizeLookup).         */         /*             public GridLayoutManager (Context context, int spanCount)                 Creates a vertical GridLayoutManager              Parameters                 context : Current context, will be used to access resources.                 spanCount : The number of columns in the grid         */         // Define a layout for RecyclerView         mLayoutManager = new GridLayoutManager(mContext,3);         mRecyclerView.setLayoutManager(mLayoutManager);          // Initialize a new instance of RecyclerView Adapter instance         mAdapter = new AnimalsAdapter(mContext,animals);          // Set the adapter for RecyclerView         mRecyclerView.setAdapter(mAdapter);    } } 
AnimalsAdapter.java
 package com.cfsuman.me.androidcode;  import android.content.Context; import android.graphics.Color; import android.graphics.EmbossMaskFilter; import android.graphics.drawable.GradientDrawable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView;  import java.util.Random;   public class AnimalsAdapter extends RecyclerView.Adapter<AnimalsAdapter.ViewHolder>{     private String[] mDataSet;     private Context mContext;     private Random mRandom = new Random();      public AnimalsAdapter(Context context,String[] DataSet){         mDataSet = DataSet;         mContext = context;     }      public static class ViewHolder extends RecyclerView.ViewHolder{         public TextView mTextView;         public LinearLayout mLinearLayout;         public ViewHolder(View v){             super(v);             mTextView = (TextView) v.findViewById(R.id.tv);             mLinearLayout = (LinearLayout) v.findViewById(R.id.ll);         }     }      @Override     public AnimalsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){         // Create a new View         View v = LayoutInflater.from(mContext).inflate(R.layout.custom_view,parent,false);         ViewHolder vh = new ViewHolder(v);         return vh;     }      @Override     public void onBindViewHolder(ViewHolder holder, int position){         holder.mTextView.setText(mDataSet[position]);         // Generate a random color         int color = getRandomHSVColor();          // Set a random color for TextView background         holder.mTextView.setBackgroundColor(getLighterColor(color));          // Set a text color for TextView         holder.mTextView.setTextColor(getReverseColor(color));          // Set a gradient background for LinearLayout         holder.mLinearLayout.setBackground(getGradientDrawable());          // Emboss the TextView text         applyEmbossMaskFilter(holder.mTextView);     }      @Override     public int getItemCount(){         return mDataSet.length;     }      // Custom method to apply emboss mask filter to TextView     protected void applyEmbossMaskFilter(TextView tv){         EmbossMaskFilter embossFilter = new EmbossMaskFilter(                 new float[]{1f, 5f, 1f}, // direction of the light source                 0.8f, // ambient light between 0 to 1                 8, // specular highlights                 7f // blur before applying lighting         );         tv.setLayerType(View.LAYER_TYPE_SOFTWARE,null);         tv.getPaint().setMaskFilter(embossFilter);     }      // Custom method to generate random HSV color     protected int getRandomHSVColor(){         // Generate a random hue value between 0 to 360         int hue = mRandom.nextInt(361);         // We make the color depth full         float saturation = 1.0f;         // We make a full bright color         float value = 1.0f;         // We avoid color transparency         int alpha = 255;         // Finally, generate the color         int color = Color.HSVToColor(alpha, new float[]{hue, saturation, value});         // Return the color         return color;     }      // Custom method to create a GradientDrawable object     protected GradientDrawable getGradientDrawable(){         GradientDrawable gradient = new GradientDrawable();         gradient.setGradientType(GradientDrawable.SWEEP_GRADIENT);         gradient.setColors(new int[]{getRandomHSVColor(), getRandomHSVColor(),getRandomHSVColor()});         return gradient;     }      // Custom method to get a darker color     protected int getDarkerColor(int color){         float[] hsv = new float[3];         Color.colorToHSV(color, hsv);         hsv[2] = 0.8f *hsv[2];         return Color.HSVToColor(hsv);     }      // Custom method to get a lighter color     protected int getLighterColor(int color){         float[] hsv = new float[3];         Color.colorToHSV(color,hsv);         hsv[2] = 0.2f + 0.8f * hsv[2];         return Color.HSVToColor(hsv);     }      // Custom method to get reverse color     protected int getReverseColor(int color){         float[] hsv = new float[3];         Color.RGBToHSV(                 Color.red(color), // Red value                 Color.green(color), // Green value                 Color.blue(color), // Blue value                 hsv         );         hsv[0] = (hsv[0] + 180) % 360;         return Color.HSVToColor(hsv);     } } 
build.gradle [dependencies]
 compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.android.support:cardview-v7:23.0.1' 

Komentar