Я использовал общий элемент с RecyclerView Item и Item Decoration (Перекрывающийся элемент в RecyclerView), когда мы нажимаем Item, он не сглаживается совместно используемым элементом.
Негладкая ссылка на видео: https://drive.google.com/file/d/17T3cYAeq8jFSilVA-mmT5ccUCbUyHTZs/view?usp=drivesdk
если я не использую Художественное оформление элемента (перекрывающийся элемент в RecyclerView), анимация общего элемента плавная
Плавное видео Ссылка: https://drive.google.com/file/d/17VIp4vp4SkazxeLvz0S9C0uQD4qZIxE_/view?usp=drivesdk
Список общих элементов кода активности
ViewCompat.setTransitionName(card_view, getResources().getString(R.string.transition));
ActivityOptionsCompat transition = ActivityOptionsCompat.makeSceneTransitionAnimation(this, card_view, getResources().getString(R.string.transition));
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("data", item);
ActivityCompat.startActivityForResult(MainActivity.this, intent, DETAIL_REQ, transition.toBundle());
Подробно Код активности
@Override
public void onBackPressed() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setExitTransition(null);
finishAfterTransition();
}else {
supportFinishAfterTransition();
}}
стиль приложения ниже
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item>
<item name="android:windowAllowEnterTransitionOverlap" tools:targetApi="lollipop">false</item>
<item name="android:windowAllowReturnTransitionOverlap" tools:targetApi="lollipop">false</item>
<item name="android:windowSharedElementEnterTransition" tools:targetApi="lollipop">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition" tools:targetApi="lollipop">@android:transition/move</item>
</style>
Код украшения перекрытия
public class OverlapDecoration extends RecyclerView.ItemDecoration {
//Following code from : http://stackoverflow.com/questions/27633454/how-to-overlap-items-in-linearlayoutmanager-recyclerview-like-stacking-cards
private final int overlap;
public OverlapDecoration(int overlap) {
this.overlap = overlap;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
final int itemPosition = parent.getChildAdapterPosition(view);
if (itemPosition == 0) {
outRect.set(0, 0, 0, 0);
} else {
outRect.set(0, overlap, 0, 0);
}
}
}