Как я могу правильно рисовать ItemDecoration, когда элемент RecyclerView оживляет его высоту?

У меня есть RecyclerView, который использует LinearLayoutManager (вертикальный). То, что я пытаюсь выполнить, состоит в том, что при перемещении представления элемент div (full width и 1px tall) оживляет анимацию (перемещениеY () имеет дело с этим правильно) и когда представление изменяет его высоту. В текущем коде, который у меня ниже, делитель перейдет к будущей позиции нижней части представления, а не к текущему дну во время анимации. Есть ли способ объяснить изменения высоты в украшении элементов во время анимации, чтобы анимация выглядела лучше?

Я изменяю высоту представления, используя notifyItemChanged () на адаптере для RecyclerView.

public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public DividerItemDecoration(Context context) { mDivider = context.getResources().getDrawable(R.drawable.line_divider); } @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { int right = parent.getWidth(); int dividerHeight = mDivider.getIntrinsicHeight(); int childCount = parent.getChildCount(); for (int i = 0; i < childCount - 1; i++) { View child = parent.getChildAt(i); View nextChild = parent.getChildAt(i + 1); RecyclerView.LayoutParams layoutParams1 = (RecyclerView.LayoutParams) child.getLayoutParams(); RecyclerView.LayoutParams layoutParams2 = (RecyclerView.LayoutParams) nextChild.getLayoutParams(); int left = 0; if (layoutParams1 != null && layoutParams2 != null) { left = Math.min(layoutParams1.leftMargin, layoutParams2.leftMargin); } int ty = (int) (child.getTranslationY() + 0.5f); int top = child.getBottom() + ty; int bottom = top + dividerHeight; mDivider.setBounds( left, top, right, bottom); mDivider.draw(c); } } } 

Я была такая же проблема. Решив это, добавив переход ребенка к вычислениям в методе onDraw, например:

 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { int left = parent.getPaddingLeft(); int right = parent.getWidth() - parent.getPaddingRight(); int childCount = parent.getChildCount(); for (int i = 0; i < childCount - 1; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); //Here is the trick! int top = child.getBottom() + params.bottomMargin + Math.round(child.getTranslationY()); int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } 
Intereting Posts
Как настроить программный интерфейс android: angle GradientDrawable? Основанная на местоположении расширенная реальность Framework (Android, iOS) с 3D-POI? В чем разница между «Make» и «Gradle-aware Make»? Action-bar – элемент подменю, текст и изображение не работают должным образом Классы Java по сравнению с классами C ++ Почему мой StringRequest всегда работает с методом onErrorResponse? Как реализовать XMPP для отправки push-уведомлений Как проверить, имеет ли EditText в Android смайлик или нет? Изменение фона тоста в соответствии с темой деятельности Обнаружение столкновений Pixel Perfect между пользовательским представлением и ImageView BitmapFactory.decodeByteArray () возвращает NULL Внешний AndroidManifest.xml не отображается в панели просмотра проекта Как получить доступные языки (не все из них, только языки, доступные в моем приложении) Какое имя пакета Android Market или Google Apps Intellij Navigate> Class … исключить определенные файлы