From 260ae17d3fce5bcecea67b50f4a28c52e9b4f3a0 Mon Sep 17 00:00:00 2001 From: Alexey Skoryatin Date: Sat, 5 Sep 2015 17:27:36 +0300 Subject: [PATCH] Minimal default RecyclerView animations support --- .../HeaderPositionCalculator.java | 8 ++++---- .../sample/DividerDecoration.java | 4 ++-- .../sample/MainActivity.java | 19 +++++++++++++++++-- .../sample/RecyclerArrayAdapter.java | 2 +- sample/src/main/res/layout/activity_main.xml | 8 ++++++++ sample/src/main/res/values/strings.xml | 3 ++- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/library/src/main/java/com/timehop/stickyheadersrecyclerview/HeaderPositionCalculator.java b/library/src/main/java/com/timehop/stickyheadersrecyclerview/HeaderPositionCalculator.java index 5f4727d..ad00dd6 100644 --- a/library/src/main/java/com/timehop/stickyheadersrecyclerview/HeaderPositionCalculator.java +++ b/library/src/main/java/com/timehop/stickyheadersrecyclerview/HeaderPositionCalculator.java @@ -105,14 +105,14 @@ private Rect getDefaultHeaderOffset(RecyclerView recyclerView, View header, View int translationX, translationY; Rect headerMargins = mDimensionCalculator.getMargins(header); if (orientation == LinearLayoutManager.VERTICAL) { - translationX = firstView.getLeft() + headerMargins.left; + translationX = (int) firstView.getX() + headerMargins.left; translationY = Math.max( - firstView.getTop() - header.getHeight() - headerMargins.bottom, + (int) firstView.getY() - header.getHeight() - headerMargins.bottom, getListTop(recyclerView) + headerMargins.top); } else { - translationY = firstView.getTop() + headerMargins.top; + translationY = (int) firstView.getY() + headerMargins.top; translationX = Math.max( - firstView.getLeft() - header.getWidth() - headerMargins.right, + (int) firstView.getX() - header.getWidth() - headerMargins.right, getListLeft(recyclerView) + headerMargins.left); } diff --git a/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/DividerDecoration.java b/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/DividerDecoration.java index 9321961..0b11b04 100644 --- a/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/DividerDecoration.java +++ b/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/DividerDecoration.java @@ -60,7 +60,7 @@ public void drawVertical(Canvas c, RecyclerView parent) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); - final int top = Math.max(recyclerViewTop, child.getBottom() + params.bottomMargin); + final int top = Math.max(recyclerViewTop, child.getBottom() + (int) child.getTranslationY() + params.bottomMargin); final int bottom = Math.min(recyclerViewBottom, top + mDivider.getIntrinsicHeight()); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); @@ -77,7 +77,7 @@ public void drawHorizontal(Canvas c, RecyclerView parent) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); - final int left = Math.max(recyclerViewLeft, child.getRight() + params.rightMargin); + final int left = Math.max(recyclerViewLeft, child.getRight() + (int) child.getTranslationX() + params.rightMargin); final int right = Math.min(recyclerViewRight, left + mDivider.getIntrinsicHeight()); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); 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 08de19a..3c2032c 100644 --- a/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java +++ b/sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java @@ -25,6 +25,8 @@ public class MainActivity extends Activity { + public static final String ANIMALS_BELOW = "Animals below!"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -32,6 +34,7 @@ protected void onCreate(Bundle savedInstanceState) { final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); Button button = (Button) findViewById(R.id.button_update); + Button buttonAdd = (Button) findViewById(R.id.button_add); final ToggleButton isReverseButton = (ToggleButton) findViewById(R.id.button_is_reverse); // Set adapter populated with example dummy data @@ -57,6 +60,18 @@ public void run() { } }); + // Add/remove item to the top of list (Test animations) + buttonAdd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (ANIMALS_BELOW.equals(mAdapter.getItem(0))) { + mAdapter.remove(ANIMALS_BELOW); + } else { + mAdapter.add(0, ANIMALS_BELOW); + } + } + }); + // Set layout manager int orientation = getLayoutManagerOrientation(getResources().getConfiguration().orientation); final LinearLayoutManager layoutManager = new LinearLayoutManager(this, orientation, isReverseButton.isChecked()); @@ -122,7 +137,7 @@ private class SampleArrayHeadersAdapter extends RecyclerArrayAdapter +