Skip to content

Commit

Permalink
Library setup
Browse files Browse the repository at this point in the history
  • Loading branch information
leruaa committed Sep 22, 2014
1 parent 222edf6 commit 0ab5177
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.gradle
.idea
build/
*.iml

# Ignore Gradle GUI config
gradle-app.setting
18 changes: 18 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -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()
}
}
3 changes: 3 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

VERSION_NAME=0.1.0
GROUP=com.eowise
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions library/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build/
*.iml
10 changes: 10 additions & 0 deletions library/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apply plugin: 'com.android.library'

dependencies {
compile 'com.android.support:recyclerview-v7:+'
}

android {
compileSdkVersion 'android-L'
buildToolsVersion '20.0.0'
}
6 changes: 6 additions & 0 deletions library/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eowise.recyclerview.stickyheaders">

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.eowise.recyclerview.stickyheaders;

import android.view.ViewGroup;

public interface StickyHeadersAdapter<ItemViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder, HeaderViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder> {

HeaderViewHolder onCreateViewHolder(ViewGroup parent);

void onBindViewHolder(HeaderViewHolder headerViewHolder, ItemViewHolder itemViewHolder, int position);

long getHeaderId(ItemViewHolder viewHolder, int position);
}
Original file line number Diff line number Diff line change
@@ -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);
}

}
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include 'library'

0 comments on commit 0ab5177

Please sign in to comment.