Как анимировать только выбранные элементы в RecyclerView - PullRequest
0 голосов
/ 27 января 2020

У меня есть RecyclerView, и я хочу анимировать один View внутри RecyclerView элемента только для элементов, которые удовлетворяют определенному условию.

Я использую ObjectAnimator для этого. Иногда это работает нормально, но иногда анимация применяется ко всем представлениям. Я предполагаю, что с Views есть какая-то проблема с переработкой, но я не уверен, что может вызвать это.

Пример:

val halfHeightCropped = halfHeight - (stopIndicatorHeight/2) //half item height minus half timeline circle height
        val halfDistCurrToNext = timeDistCurrToNext/2
        if (alreadyTraveled > halfDistCurrToNext){
            animator = ObjectAnimator.ofFloat(indicator, "translationY",  halfHeightCropped.toFloat()).apply {
                duration = 0
                start()
            }
        }

Я анимирующий круг, который движется вертикально через график времени, основанный на реальном времени. Этот круг является частью каждого элемента RecyclerView, а в некоторых элементах этот элемент находится по центру в элементе View, а некоторые (по 1 в то время) анимируют этот круг по вертикали.

Приведенный выше пример является частью функции, которая вызывается из onBindViewHolder, если элемент соответствует условию, в противном случае представление сбрасывается в положение по умолчанию. (вертикаль параметра центра в элементе).

1 Ответ

0 голосов
/ 27 января 2020

когда элемент выбирается из recyclerView, выберите его в адаптере, как

yourAdapter = new yourAdapter(new ArrayLis(),new ItemOnClick(){
    @Override
    public void onClick(int position){
        yourAdapter.selectItem(position)
    }
});

выполнить анимацию в методе bind () holder class.

if(selectedItem = getAdapterPosition){
    //perform your animation for the selected item
}

вашего адаптера для этого должна быть переменная selectedItem и метод установки.

...