출처 : http://www.journaldev.com/13792/android-gridlayoutmanager-example

Android GridLayoutManager

We’ve implemented a RecyclerView using a LinearLayoutManager here. Now let’s use a GridLayoutManagerto layout the RecyclerView as a grid.

Following is the constructor for a GridLayoutManager.

GridLayoutManager (Context context, 
                int spanCount, 
                int orientation, 
                boolean reverseLayout)

reverseLayout if set true then layout items from end to start.

To set the span size for each item, we invoke the method setSpanSizeLookup on the GridLayoutManager

Let’s implement RecyclerView using a GridLayoutManager in a new Android Studio project.

Android GridLayoutManager Example Project Structure

Android GridLayoutManager example

The project consists of a single Activity : MainActivity.java, an adapter class : RecyclerViewAdapter.java, a DataModel.java class and a custom GridLayoutManager class AutoFitGridLayoutManager.java.

The xml layout of the MainActivity.java class is defined in the file activity_main.xml as

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

Note: Don’t forget to add the following dependencies for Material Design widgets and CardView in the build.gradle file.

compile 'com.android.support:cardview-v7:25.1.1'
compile 'com.android.support:design:25.1.1'

The DataModel.java class is given below:
package com.journaldev.recyclerviewgridlayoutmanager;

public class DataModel {

    public String text;
    public int drawable;
    public String color;

    public DataModel(String t, int d, String c )
    {
        text=t;
        drawable=d;
        color=c;
    }
}

The DataModel class will hold the text, drawable icon and background colour of each item cell.

The RecyclerViewAdapter.java class is given below:

package com.journaldev.recyclerviewgridlayoutmanager;

import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;


public class RecyclerViewAdapter extends RecyclerView.Adapter {

    ArrayList mValues;
    Context mContext;
    protected ItemListener mListener;

    public RecyclerViewAdapter(Context context, ArrayList values, ItemListener itemListener) {

        mValues = values;
        mContext = context;
        mListener=itemListener;
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView textView;
        public ImageView imageView;
        public RelativeLayout relativeLayout;
        DataModel item;

        public ViewHolder(View v) {

            super(v);

            v.setOnClickListener(this);
            textView = (TextView) v.findViewById(R.id.textView);
            imageView = (ImageView) v.findViewById(R.id.imageView);
            relativeLayout = (RelativeLayout) v.findViewById(R.id.relativeLayout);

        }

        public void setData(DataModel item) {
            this.item = item;

            textView.setText(item.text);
            imageView.setImageResource(item.drawable);
            relativeLayout.setBackgroundColor(Color.parseColor(item.color));

        }


        @Override
        public void onClick(View view) {
            if (mListener != null) {
                mListener.onItemClick(item);
            }
        }
    }

    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(mContext).inflate(R.layout.recycler_view_item, parent, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder Vholder, int position) {
        Vholder.setData(mValues.get(position));

    }

    @Override
    public int getItemCount() {

        return mValues.size();
    }

    public interface ItemListener {
        void onItemClick(DataModel item);
    }
}

In the above code we’ve defined an ItemListener interface that’ll be implemented in the MainActivity.java class.

The xml layout for each RecyclerView item is given below.
recycler_view_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:id="@+id/cardView"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        card_view:cardCornerRadius="0dp"
        card_view:cardElevation="@dimen/margin10"
        card_view:cardMaxElevation="@dimen/margin10"
        card_view:contentPadding="@dimen/margin10">


        <RelativeLayout
            android:id="@+id/relativeLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_gravity="center">

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:tint="@android:color/white"
                android:padding="5dp" />


            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:textColor="@android:color/white"
                android:layout_below="@+id/imageView" />


        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout>

The AutoFitGridLayoutManager.java class is given below:

package com.journaldev.recyclerviewgridlayoutmanager;

import android.content.Context;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

public class AutoFitGridLayoutManager extends GridLayoutManager {

    private int columnWidth;
    private boolean columnWidthChanged = true;

    public AutoFitGridLayoutManager(Context context, int columnWidth) {
        super(context, 1);

        setColumnWidth(columnWidth);
    }

    public void setColumnWidth(int newColumnWidth) {
        if (newColumnWidth > 0 && newColumnWidth != columnWidth) {
            columnWidth = newColumnWidth;
            columnWidthChanged = true;
        }
    }

    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        if (columnWidthChanged && columnWidth > 0) {
            int totalSpace;
            if (getOrientation() == VERTICAL) {
                totalSpace = getWidth() - getPaddingRight() - getPaddingLeft();
            } else {
                totalSpace = getHeight() - getPaddingTop() - getPaddingBottom();
            }
            int spanCount = Math.max(1, totalSpace / columnWidth);
            setSpanCount(spanCount);
            columnWidthChanged = false;
        }
        super.onLayoutChildren(recycler, state);
    }
}

The span count is dynamically calculated based on the orientation, width and height available.

The MainActivity.java class is given below:

package com.journaldev.recyclerviewgridlayoutmanager;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements RecyclerViewAdapter.ItemListener {

    RecyclerView recyclerView;
    ArrayList arrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        arrayList = new ArrayList();
        arrayList.add(new DataModel("Item 1", R.drawable.battle, "#09A9FF"));
        arrayList.add(new DataModel("Item 2", R.drawable.beer, "#3E51B1"));
        arrayList.add(new DataModel("Item 3", R.drawable.ferrari, "#673BB7"));
        arrayList.add(new DataModel("Item 4", R.drawable.jetpack_joyride, "#4BAA50"));
        arrayList.add(new DataModel("Item 5", R.drawable.three_d, "#F94336"));
        arrayList.add(new DataModel("Item 6", R.drawable.terraria, "#0A9B88"));

        RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, arrayList, this);
        recyclerView.setAdapter(adapter);


        /**
         AutoFitGridLayoutManager that auto fits the cells by the column width defined.
         **/

        /*AutoFitGridLayoutManager layoutManager = new AutoFitGridLayoutManager(this, 500);
        recyclerView.setLayoutManager(layoutManager);*/


        /**
         Simple GridLayoutManager that spans two columns
         **/
        GridLayoutManager manager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(manager);
    }

    @Override
    public void onItemClick(DataModel item) {

        Toast.makeText(getApplicationContext(), item.text + " is clicked", Toast.LENGTH_SHORT).show();

    }
}
  1. The above class implements the interface RecyclerViewAdapter.ItemListener and overrides the method onItemClick that’s defined in the adapter class. By doing this, we’ve implemented the RecyclerView Click Listener within our Activity instead of the Adapter class(similar to the standard onItemClickListener defined for a ListView)
  2. DataModel class holds the details for each RecyclerView item
  3. The LayoutManager of the RecyclerView can be defined by either instantiating the AutoFitGridLayoutManager class with the column width set as 500 or by invoking the GridLayoutManager class object and setting the number of columns as 2

Let’s see the output of the application with the standard GridLayoutManager code.

android GridLayoutManager grid layout output

As you can see, each row has two items that span the column width in both orientations.

Now comment out the code for simple GridLayoutManager and run the code for AutoFitGridLayoutManager

AutoFitGridLayoutManager layoutManager = new AutoFitGridLayoutManager(this, 500);
recyclerView.setLayoutManager(layoutManager);

The output of the application in action is given below.
android GridLayoutManager auto fit grid layout

As you can see in the above output, when the orientation changes to landscape, each row has three items, thereby dynamically sizing the items to auto-fit the column width.

This brings an end to this tutorial. You can download the final android GridLayoutManager project from the link given below.

public class TileBitmapProvider implements BitmapProvider {

    private final TileProvider provider;
    private final Bitmap.Config bitmapConfig;
    private final int backgroundColor;
    private final BitmapPool bitmapPool;
    private final Rect frameRect = new Rect();

    public TileBitmapProvider(final TileProvider provider,
                              final BitmapPool bitmapPool,
                              final Bitmap.Config bitmapConfig,
                              final int backgroundColor) {
        this.provider = provider;
        this.bitmapConfig = bitmapConfig;
        this.backgroundColor = backgroundColor;
        this.bitmapPool = bitmapPool;
    }

    @Override public Bitmap getBitmap(final Tile tile, final Context context) {
        try {
            Bitmap bmp = tile.getBitmap();

            if (bmp == null || bmp.isRecycled()) {
                bmp = bitmapPool.poll();
                bmp = bmp != null ? bmp : Bitmap.createBitmap(tile.getWidth(), tile.getHeight(), bitmapConfig);
                // tiles at edges need to be padded so that they fit correctly
                bmp.eraseColor(backgroundColor);

                final BitmapFactory.Options ops = new BitmapFactory.Options();
                ops.inPreferredConfig = bitmapConfig;
                ops.inBitmap = bmp;
                ops.inMutable = true;

                frameRect.set(0, 0, tile.getWidth(), tile.getHeight());
                bmp = BitmapRegionDecoder.newInstance(provider.readTile(tile), false).decodeRegion(frameRect, ops);
            }

            return bmp;
        } catch (final IOException e) {
            Logger.getInstance().critical(getClass().getSimpleName(), e, "Error loading tile:");
        }
        return null;
    }
}

다음은 경고를 트리거하는 코드입니다.

public class TileBitmapProvider implements BitmapProvider {

    private final TileProvider provider;
    private final Bitmap.Config bitmapConfig;
    private final int backgroundColor;
    private final BitmapPool bitmapPool;

    public TileBitmapProvider(final TileProvider provider,
                              final BitmapPool bitmapPool,
                              final Bitmap.Config bitmapConfig,
                              final int backgroundColor) {
        this.provider = provider;
        this.bitmapConfig = bitmapConfig;
        this.backgroundColor = backgroundColor;
        this.bitmapPool = bitmapPool;
    }

    @Override public Bitmap getBitmap(final Tile tile, final Context context) {
        try {
            Bitmap bmp = tile.getBitmap();

            if (bmp == null || bmp.isRecycled()) {
                bmp = bitmapPool.poll();
                bmp = bmp != null ? bmp : Bitmap.createBitmap(tile.getWidth(), tile.getHeight(), bitmapConfig);
                // tiles at edges need to be padded so that they fit correctly
                bmp.eraseColor(backgroundColor);

                final BitmapFactory.Options ops = new BitmapFactory.Options();
                ops.inPreferredConfig = bitmapConfig;
                ops.inBitmap = bmp;
                ops.inMutable = true;

                bmp = BitmapFactory.decodeStream(provider.readTile(tile), null, ops);
            }

            return bmp;
        } catch (final IOException e) {
            Logger.getInstance().critical(getClass().getSimpleName(), e, "Error loading tile:");
        }
        return null;
    }
}


List of Android Top 1000 Libraries

A curated list of awesome Android Top 1000 libraries.

Mantainers

iamdaiyuan iamdaiyuan

Top 1000

NameDemo
nostra13/Android-Universal-Image-Loader
jfeinstein10/SlidingMenu
google/iosched
JakeWharton/ActionBarSherlock
forkhubs/android
libgdx/libgdx
loopj/android-async-http
square/picasso
square/retrofit
JakeWharton/ViewPagerIndicator
excilys/androidannotations
chrisbanes/Android-PullToRefresh
greenrobot/EventBus
square/okhttp
facebook/fresco
Bearded-Hen/Android-Bootstrap
navasmdc/MaterialDesignLibrary
WhisperSystems/TextSecure
PhilJay/MPAndroidChart
futurice/android-best-practices
JakeWharton/butterknife
square/leakcanary
nhaarman/ListViewAnimations
AndroidBootstrap/android-bootstrap
chrisbanes/PhotoView
square/dagger
gabrielemariotti/cardslib
etsy/AndroidStaggeredGrid
ksoichiro/Android-ObservableScrollView
aporter/coursera-android
koush/ion
facebook/facebook-android-sdk
googlesamples/android-UniversalMusicPlayer
bumptech/glide
umano/AndroidSlidingUpPanel
daimajia/AndroidSwipeLayout
roboguice/roboguice
daimajia/AndroidViewAnimations
47deg/android-swipelistview
emilsjolander/StickyListHeaders
square/otto
facebook/stetho
nicolasgramlich/AndEngine
keyboardsurfer/Crouton
greenrobot/greenDAO
JakeWharton/NineOldAndroids
cyrilmottier/GreenDroid
pardom/ActiveAndroid
koush/AndroidAsync
wyouflf/xUtils
stephanenicolas/robospice
SimonVT/android-menudrawer
makovkastar/FloatingActionButton
ManuelPeinado/FadingActionBar
castorflex/SmoothProgressBar
johannilsson/android-pulltorefresh
bauerca/drag-sort-listview
dmytrodanylyk/circular-progress-button
futuresimple/android-floating-action-button
liaohuqiu/android-Ultra-Pull-To-Refresh
chrisjenx/Calligraphy
square/android-times-square
ACRA/acra
Trinea/android-common
chrisbanes/cheesesquare
traex/RippleEffect
yangfuhai/afinal
Comcast/FreeFlow
k9mail/k-9
theDazzler/droidicon
mcxiaoke/android-volley
openaphid/android-flip
JakeWharton/u2020
Yalantis/Side-Menu.Android
JakeWharton/DiskLruCache
romannurik/muzei
qii/weiciyuan
androidquery/androidquery
BoltsFramework/Bolts-Android
jgilfelt/android-viewbadger
hdodenhof/CircleImageView
daimajia/NumberProgressBar
avast/android-styled-dialogs
pakerfeldt/android-viewflow
daimajia/AndroidImageSlider
path/android-priority-jobqueue
dmytrodanylyk/android-process-button
yixia/VitamioBundle
jgilfelt/SystemBarTint
derekbrameyer/android-betterpickers
ReactiveX/RxAndroid
tjerkw/Android-SlideExpandableListView
markushi/android-ui
SpecialCyCi/AndroidResideMenu
koral--/android-gif-drawable
rey5137/material
balysv/material-menu
pedrovgs/EffectiveAndroidUI
Yalantis/Context-Menu.Android
singwhatiwanna/dynamic-load-apk
pedrovgs/DraggablePanel
Todd-Davies/ProgressWheel
SecUpwN/Android-IMSI-Catcher-Detector
nispok/snackbar
johannilsson/android-actionbar
ikew0ng/SwipeBackLayout
google/ExoPlayer
Bilibili/DanmakuFlameMaster
robovm/robovm
wasabeef/recyclerview-animators
daimajia/AndroidViewHover
JohnPersano/SuperToasts
beworker/pinned-section-listview
kikoso/android-stackblur
orhanobut/logger
maurycyw/StaggeredGridView
pedant/sweet-alert-dialog
PomepuyN/BlurEffectForAndroidDesign
jdamcd/android-crop
mttkay/ignition
edmodo/cropper
xamarin/XobotOS
lgvalle/Material-Animations
lecho/hellocharts-android
commonsguy/cw-advandroid
facebook/conceal
CyberAgent/android-gpuimage
JoanZapata/android-iconify
saulmm/Android-Material-Examples
chrisbanes/philm
psaravan/JamsMusicPlayer
jgilfelt/android-sqlite-asset-helper
novoda/android-demos
stormzhang/9GAG
cymcsg/UltimateAndroid
thest1/LazyList
orhanobut/dialogplus
johncarl81/parceler
bluelinelabs/LoganSquare
eluleci/FlatUI
android10/Android-CleanArchitecture
siacs/Conversations
mikepenz/LollipopShowcase
alamkanak/Android-Week-View
square/tape
siyamed/android-satellite-menu
commonsguy/cw-android
Flowdalic/asmack
ManuelPeinado/GlassActionBar
romainguy/ViewServer
googlesamples/android-testing
apache/cordova-android
MikeOrtiz/TouchImageView
JakeWharton/Telecine
jjoe64/GraphView
wasabeef/richeditor-android
harism/android_page_curl
cymcsg/UltimateRecyclerView
qiujuer/Genius-Android
loopj/android-smart-image-view
ikimuhendis/LDrawer
RobotiumTech/robotium
RomainPiel/Shimmer-android
grantland/android-autofittextview
todoroo/astrid
satyan/sugar
JakeWharton/timber
romannurik/Android-SwipeToDismiss
diogobernardino/WilliamChart
owncloud/android
eoecn/android-app
orhanobut/hawk
daCapricorn/ArcMenu
white-cat/ThinkAndroid
mttkay/droid-fu
rockerhieu/emojicon
MrEngineer13/SnackBar
square/assertj-android
ginatrapani/todo.txt-android
johnkil/Android-AppMsg
kymjs/KJFrameForAndroid
oguzbilgener/CircularFloatingActionMenu
romainguy/road-trip
markushi/android-circlebutton
redsolution/xabber-android
lucasr/smoothie
novoda/image-loader
pwnall/chromeview
daimajia/AnimationEasingFunctions
calabash/calabash-android
googlemaps/android-maps-utils
mixi-inc/AndroidTraining
avast/android-butterknife-zelezny
alexvasilkov/FoldableLayout
sephiroth74/ImageViewZoom
dlew/joda-time-android
ragunathjawahar/android-saripaar
jgilfelt/android-mapviewballoons
jackpal/Android-Terminal-Emulator
yahoo/squidb
udacity/Sunshine
simpligility/android-maven-plugin
koush/UrlImageViewHelper
kmshack/Android-ParallaxHeaderViewPager
klinker24/Talon-for-Twitter
JoanZapata/android-pdfview
iPaulPro/aFileChooser
commonsguy/cwac-endless
Raizlabs/DBFlow
dexafree/MaterialList
pingpongboss/StandOut
jasonpolites/gesture-imageview
tehmou/rx-android-architecture
jberkel/sms-backup-plus
facebook/shimmer-android
blackfizz/EazeGraph
vekexasia/android-edittext-validator
AntennaPod/AntennaPod
romannurik/Android-MonthCalendarWidget
antonkrasov/AndroidSocialNetworks
500px/500px-android-blur
drakeet/MaterialDialog
guardianproject/ChatSecureAndroid
LarsWerkman/HoloColorPicker
UweTrottmann/SeriesGuide
stephanenicolas/Quality-Tools-for-Android
RomainPiel/Titanic
romannurik/Android-WizardPager
Pkmmte/CircularImageView
facebook/device-year-class
wunderlist/android-sliding-layer-lib
wordpress-mobile/WordPress-Android
baoyongzhang/android-PullRefreshLayout
chrisbanes/Android-BitmapCache
square/wire
dinocore1/DevsmartLib-Android
antoniolg/androidmvp
gabrielemariotti/RecyclerViewItemAnimators
roomorama/Caldroid
balysv/material-ripple
ZieIony/Carbon
frankiesardo/auto-parcel
GDG-Korea/PinterestLikeAdapterView
jpardogo/ListBuddies
expectedbehavior/gauges-android
MizzleDK/Mizuu
mcharmas/android-parcelable-intellij-plugin
Avocarrot/json2view
eowise/recyclerview-stickyheaders
kanytu/android-parallax-recyclerview
emilsjolander/sprinkles
ManuelPeinado/MultiChoiceAdapter
RoboBinding/RoboBinding
sromku/android-simple-facebook
MichaelEvans/ColorArt
hoang8f/android-flat-button
RadiusNetworks/android-ibeacon-service
bmelnychuk/AndroidTreeView
felipecsl/AsymmetricGridView
siyamed/android-shape-imageview
Manabu-GT/ExpandableTextView
sephiroth74/HorizontalVariableListView
passsy/android-HoloCircularProgressBar
LitePalFramework/LitePal
jpardogo/GoogleProgressBar
mihaip/dex-method-counts
gabrielemariotti/androiddev
inmite/android-selector-chapek
chrislacy/TweetLanes
andkulikov/Transitions-Everywhere
ManuelPeinado/RefreshActionItem
flavioarfaria/KenBurnsView
fyhertz/libstreaming
ToxicBakery/ViewPagerTransforms
ChrisRenke/DrawerArrowDrawable
johnkil/Android-ProgressFragment
AltBeacon/android-beacon-library
matburt/mobileorg-android
prolificinteractive/material-calendarview
Rajawali/Rajawali
daizhenjun/ImageFilterForAndroid
bluejamesbond/TextJustify-Android
MostafaGazar/soas
ApmeM/android-flowlayout
rmtheis/android-ocr
thiagolocatelli/android-uitableview
foxykeep/DataDroid
Trinea/android-auto-scroll-view-pager
BlueMor/Android-PullLayout
kaushikgopal/Android-RxJava
zcweng/ToggleButton
Konloch/bytecode-viewer
mmin18/AndroidDynamicLoader
cgeo/cgeo
JakeWharton/Android-DirectionalViewPager
oschina/android-app
Frank-Zhu/PullZoomView
woozzu/IndexableListView
dodola/android_waterfall
h6ah4i/android-advancedrecyclerview
survivingwithandroid/Surviving-with-android
akexorcist/Android-RoundCornerProgressBar
geftimov/android-player
saik0/UnifiedPreference
timehop/sticky-headers-recyclerview
xcltapestry/XCL-Charts
paddybyers/anode
lorensiuswlt/NewQuickAction
erikwt/PullToRefresh-ListView
skyfishjy/android-ripple-background
kanytu/android-material-drawer-template
hmkcode/Android
Diolor/Swipecards
jenzz/Android-UndoBar
evant/JobSchedulerCompat
nirhart/ParallaxScroll
google/santa-tracker-android
good-life/PushTalk
johnkil/Android-RobotoTextView
dm77/barcodescanner
robotmedia/AndroidBillingLibrary
sqlcipher/android-database-sqlcipher
e-biz/androidkickstartr
jeromevdl/android-holo-colors-idea-plugin
tokudu/AndroidPushNotificationsDemo
dmytrodanylyk/shadow-layout
davidschreiber/FancyCoverFlow
jpardogo/FlabbyListView
spring-projects/spring-android-samples
yangfuhai/ASimpleCache
ZhouWeikuan/cocos2d
BlueMor/DragLayout
j256/ormlite-android
Clans/FloatingActionButton
square/phrase
linroid/FilterMenu
hoang8f/android-segmented-control
mcharmas/Android-ReactiveLocation
keithellis/MaterialWidget
darvds/RibbonMenu
spring-projects/spring-android
Maxwin-z/XListView-Android
nvanbenschoten/motion
playgameservices/android-basic-samples
sd6352051/NiftyNotification
splitwise/TokenAutoComplete
dmitry-zaitsev/AndroidSideMenu
codebutler/farebot
jacobmoncur/QuiltViewLibrary
konifar/android-material-design-icon-generator-plugin
Trinea/android-demo
siriscac/RippleView
mrwonderman/android-square-progressbar
BoD/android-switch-backport
zzz40500/android-shapeLoadingView
liaohuqiu/android-GridViewWithHeaderAndFooter
shell-software/fab
emilsjolander/StickyScrollViewItems
carlonzo/StikkyHeader
bpellin/keepassdroid
rno/Android-ScrollBarPanel
lewisjdeane/L-Dialogs
pents90/svg-android
survivingwithandroid/WeatherLib
chiuki/advanced-textview
beworker/tinybus
moagrius/TileView
SimonVT/MessageBar
emilsjolander/android-FlipView
MatthewYork/Colours