int yDiff = (int) ((oldy - y) * DIRECT_SHARE_EXPANSION_RATE);
int prevHeight = mDirectShareCurrHeight;
- mDirectShareCurrHeight = Math.min(mDirectShareCurrHeight + yDiff,
- mDirectShareMaxHeight);
- mDirectShareCurrHeight = Math.max(mDirectShareCurrHeight, mDirectShareMinHeight);
- yDiff = mDirectShareCurrHeight - prevHeight;
+ int newHeight = Math.min(prevHeight + yDiff, mDirectShareMaxHeight);
+ newHeight = Math.max(newHeight, mDirectShareMinHeight);
+ yDiff = newHeight - prevHeight;
if (view == null || view.getChildCount() == 0 || yDiff == 0) {
return;
if (child.getTag() != null && child.getTag() instanceof DirectShareViewHolder) {
int widthSpec = MeasureSpec.makeMeasureSpec(child.getWidth(),
MeasureSpec.EXACTLY);
- int heightSpec = MeasureSpec.makeMeasureSpec(mDirectShareCurrHeight,
+ int heightSpec = MeasureSpec.makeMeasureSpec(newHeight,
MeasureSpec.EXACTLY);
child.measure(widthSpec, heightSpec);
child.getLayoutParams().height = child.getMeasuredHeight();
}
}
}
+
+ if (foundExpansion) {
+ mDirectShareCurrHeight = newHeight;
+ }
}
}
private final Rect mTempRect = new Rect();
+ private AbsListView mNestedScrollingChild;
+
private final ViewTreeObserver.OnTouchModeChangeListener mTouchModeChangeListener =
new ViewTreeObserver.OnTouchModeChangeListener() {
@Override
return mIsDragging || mOpenOnClick;
}
+ private boolean isNestedChildScrolled() {
+ return mNestedScrollingChild != null
+ && mNestedScrollingChild.getChildCount() > 0
+ && (mNestedScrollingChild.getFirstVisiblePosition() > 0
+ || mNestedScrollingChild.getChildAt(0).getTop() < 0);
+ }
+
@Override
public boolean onTouchEvent(MotionEvent ev) {
final int action = ev.getActionMasked();
}
if (mIsDragging) {
final float dy = y - mLastTouchY;
- performDrag(dy);
+ if (dy > 0 && isNestedChildScrolled()) {
+ mNestedScrollingChild.smoothScrollBy((int) -dy, 0);
+ } else {
+ performDrag(dy);
+ }
}
mLastTouchY = y;
}
smoothScrollTo(mCollapsibleHeight + mUncollapsibleHeight, yvel);
mDismissOnScrollerFinished = true;
} else {
+ if (isNestedChildScrolled()) {
+ mNestedScrollingChild.smoothScrollToPosition(0);
+ }
smoothScrollTo(yvel < 0 ? 0 : mCollapsibleHeight, yvel);
}
}
@Override
public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
- return (nestedScrollAxes & View.SCROLL_AXIS_VERTICAL) != 0;
+ if ((nestedScrollAxes & View.SCROLL_AXIS_VERTICAL) != 0) {
+ if (child instanceof AbsListView) {
+ mNestedScrollingChild = (AbsListView) child;
+ }
+ return true;
+ }
+ return false;
}
@Override