diff --git a/.gitignore b/.gitignore
index d75bb24..a9dad0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.gradle
.idea
build/
+*.iml
# Ignore Gradle GUI config
gradle-app.setting
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..a3cc33f
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,18 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:0.12.+'
+ }
+}
+def isReleaseBuild() {
+ return version.contains("SNAPSHOT") == false
+}
+allprojects {
+ version = VERSION_NAME
+ group = GROUP
+ repositories {
+ mavenCentral()
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..54351c2
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,3 @@
+
+VERSION_NAME=0.1.0
+GROUP=com.eowise
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 9679dbb..991c577 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Sep 22 01:04:39 CEST 2014
+#Mon Sep 22 01:26:00 CEST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
+distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
diff --git a/library/.gitignore b/library/.gitignore
new file mode 100644
index 0000000..7b00bbc
--- /dev/null
+++ b/library/.gitignore
@@ -0,0 +1,2 @@
+build/
+*.iml
\ No newline at end of file
diff --git a/library/build.gradle b/library/build.gradle
new file mode 100644
index 0000000..22e4534
--- /dev/null
+++ b/library/build.gradle
@@ -0,0 +1,10 @@
+apply plugin: 'com.android.library'
+
+dependencies {
+ compile 'com.android.support:recyclerview-v7:+'
+}
+
+android {
+ compileSdkVersion 'android-L'
+ buildToolsVersion '20.0.0'
+}
\ No newline at end of file
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..6a97312
--- /dev/null
+++ b/library/src/main/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersAdapter.java b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersAdapter.java
new file mode 100644
index 0000000..d367482
--- /dev/null
+++ b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersAdapter.java
@@ -0,0 +1,12 @@
+package com.eowise.recyclerview.stickyheaders;
+
+import android.view.ViewGroup;
+
+public interface StickyHeadersAdapter {
+
+ HeaderViewHolder onCreateViewHolder(ViewGroup parent);
+
+ void onBindViewHolder(HeaderViewHolder headerViewHolder, ItemViewHolder itemViewHolder, int position);
+
+ long getHeaderId(ItemViewHolder viewHolder, int position);
+}
diff --git a/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java
new file mode 100644
index 0000000..61ae550
--- /dev/null
+++ b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java
@@ -0,0 +1,62 @@
+package com.eowise.recyclerview.stickyheaders;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Created by aurel on 22/09/14.
+ */
+public class StickyHeadersItemDecoration extends RecyclerView.ItemDecoration {
+
+ private final StickyHeadersAdapter adapter;
+ private final RecyclerView.ViewHolder headerViewHolder;
+
+ private final int itemHeight;
+
+ public StickyHeadersItemDecoration(StickyHeadersAdapter adapter, RecyclerView parent) {
+ this.adapter = adapter;
+ this.headerViewHolder = adapter.onCreateViewHolder(parent);
+
+ int widthSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.AT_MOST);
+ int heightSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.UNSPECIFIED);
+ headerViewHolder.itemView.measure(widthSpec, heightSpec);
+ itemHeight = headerViewHolder.itemView.getMeasuredHeight();
+ }
+
+ @Override
+ public void onDrawOver(Canvas c, RecyclerView parent) {
+ final int childCount = parent.getChildCount();
+ View header = headerViewHolder.itemView;
+
+ if (!header.isLaidOut()) {
+ int widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY);
+ int heightSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.UNSPECIFIED);
+ header.measure(widthSpec, heightSpec);
+ header.layout(0, 0, header.getMeasuredWidth(), header.getMeasuredHeight());
+ }
+
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+ float y = child.getY() < itemHeight ? 0 : child.getY() - itemHeight;
+ y = child.getY() + child.getHeight() < itemHeight ? y - (itemHeight - (child.getY() + child.getHeight())) : y;
+ final RecyclerView.ViewHolder itemViewHolder = parent.getChildViewHolder(child);
+
+ adapter.onBindViewHolder(headerViewHolder, itemViewHolder, itemViewHolder.getPosition());
+
+ c.save();
+ c.translate(0, y);
+ header.draw(c);
+ c.restore();
+ }
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
+
+ outRect.set(0, itemHeight, 0, 0);
+ }
+
+}
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..64e1816
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include 'library'
\ No newline at end of file