Хорошо, если у кого-то есть такая же проблема, я нашел «ответ» на мою дилемму.
Вместо установки прогресса я явно установил переход, затем попросил его перейти к концу, это сработало для расширения.
И чтобы получить сокращенную работу, мне нужно было создать другой начальный макет с перевернутой сценой движения, затем перейти к концу и установить «previoussong» как другой viewType в моем creatViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongViewHolder {
//Use the int to switch?
val itemView : View = when (viewType) {
TYPEPLAYING -> inflater.inflate(R.layout.list_motion_layout, parent, false)
TYPEUPCOMING -> inflater.inflate(R.layout.list_motion_layout, parent, false)
TYPEPREVIOUS -> inflater.inflate(R.layout.list_motion_layout_shrink, parent, false)
else
-> inflater.inflate(R.layout.footer, parent, false)
}
...
}
override fun onBindViewHolder(holder: SongViewHolder, position: Int) {
if (songs.isNotEmpty() && position < songs.size) {
val current = songs[position]
holder.songName?.text = current.song
holder.albumArt?.setImageResource(current.albumArtId)
holder.artistName?.text = current.artist
var ml = holder.motionLayout
if (current.currentPlaying){
ml?.setTransition(list_motion_layout_start, currentplaying_song)
ml?.transitionToEnd()
}
if (current.previouslyPlaying) {
ml?.setTransition(currentplaying_song, list_motion_layout_start) // Not sure if this is actually required
ml?.transitionToEnd()
}
}
}
В целом, у меня есть рабочий адаптер расширения / сжатия списка, использующий motionview, он выглядит довольно неплохо, но, вероятно, есть более приятные способы сделать это, извините, я не могу поделиться какими-либо фотографиями.