diff --git a/build.gradle b/build.gradle
index 762c758..48e850d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.5.0'
+ classpath 'com.android.tools.build:gradle:2.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index c0e747b..4f4cf7b 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri Dec 12 10:27:39 CST 2014
+#Thu Dec 29 14:37:07 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java b/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java
index 4673f8c..50ea35f 100644
--- a/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java
+++ b/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java
@@ -165,4 +165,9 @@ public void invalidateHeaders() {
mHeaderProvider.invalidate();
mHeaderRects.clear();
}
+
+ public Rect getHeaderRect(int position) {
+ return mHeaderRects.get(position);
+ }
+
}
diff --git a/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersTouchListener.java b/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersTouchListener.java
index 4a093ed..1893b8b 100644
--- a/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersTouchListener.java
+++ b/library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersTouchListener.java
@@ -1,10 +1,13 @@
package com.timehop.stickyheadersrecyclerview;
+import android.graphics.Rect;
+import android.os.Build;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.SoundEffectConstants;
import android.view.View;
+import android.view.ViewGroup;
public class StickyRecyclerHeadersTouchListener implements RecyclerView.OnItemTouchListener {
private final GestureDetector mTapDetector;
@@ -68,6 +71,12 @@ public boolean onSingleTapUp(MotionEvent e) {
if (position != -1) {
View headerView = mDecor.getHeaderView(mRecyclerView, position);
long headerId = getAdapter().getHeaderId(position);
+ Rect rect = mDecor.getHeaderRect(position);
+ int hOffset = rect.left - headerView.getLeft();
+ int vOffset = rect.top - headerView.getTop();
+ if (isChildClicked(headerView, hOffset, vOffset, e)) {
+ return false;
+ }
mOnHeaderClickListener.onHeaderClick(headerView, position, headerId);
mRecyclerView.playSoundEffect(SoundEffectConstants.CLICK);
headerView.onTouchEvent(e);
@@ -76,6 +85,31 @@ public boolean onSingleTapUp(MotionEvent e) {
return false;
}
+ private boolean isChildClicked(View headerView, int hOffset, int vOffset, MotionEvent e) {
+ if (headerView instanceof ViewGroup == false) {
+ return false;
+ }
+ ViewGroup vg = (ViewGroup) headerView;
+ int childCount = vg.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View child = vg.getChildAt(i);
+ if (isViewTouched(child, hOffset, vOffset, e) && child.isClickable()) {
+ child.performClick();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isViewTouched(View view, int hOffset, int vOffset, MotionEvent e) {
+ Rect rect = new Rect();
+ rect.left = view.getLeft() + hOffset;
+ rect.right = view.getRight() + hOffset;
+ rect.top = view.getTop() + vOffset;
+ rect.bottom = view.getBottom() + vOffset;
+ return rect.contains((int) e.getX(), (int) e.getY());
+ }
+
@Override
public boolean onDoubleTap(MotionEvent e) {
return true;
diff --git a/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java b/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java
index 591bd10..3b2e4af 100644
--- a/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java
+++ b/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java
@@ -143,15 +143,22 @@ public long getHeaderId(int position) {
@Override
public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent) {
- View view = LayoutInflater.from(parent.getContext())
+ final View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.view_header, parent, false);
+ view.findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Toast.makeText(v.getContext(), "button"+v.getTag(), Toast.LENGTH_SHORT).show();
+ }
+ });
return new RecyclerView.ViewHolder(view) {
};
}
@Override
public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder, int position) {
- TextView textView = (TextView) holder.itemView;
+ holder.itemView.findViewById(R.id.btn).setTag(position);
+ TextView textView = (TextView) holder.itemView.findViewById(R.id.tv);
textView.setText(String.valueOf(getItem(position).charAt(0)));
holder.itemView.setBackgroundColor(getRandomColor());
}
diff --git a/sample/src/main/res/layout/view_header.xml b/sample/src/main/res/layout/view_header.xml
index 09817f0..c35c955 100644
--- a/sample/src/main/res/layout/view_header.xml
+++ b/sample/src/main/res/layout/view_header.xml
@@ -1,15 +1,29 @@
-
-
\ No newline at end of file
+ android:background="#001F3F">
+
+
+
+
+
+
\ No newline at end of file