2015-12-18 6 views
2

Если пользователь нажимает на CheckBox, он запускает очень приятную анимацию (на Lollipop).Изменить CheckBox с помощью анимации в RecyclerView

Однако, если я вызываю myCheckBox.toggle() программно, он не запускает анимацию, но сразу показывает новое состояние. Есть ли способ запустить плавную анимацию при изменении состояния проверки программно?

EDIT: Оказалось, что он не запускает анимацию, если это RecyclerView. Он работает иначе ...

EDIT2: проблема заключается в аниматоре предметов. Кажется, что он убивает всех других анимаций, прежде чем начать свой собственный. Я думаю, this точная линия вызывает проблему.

+1

Вы попробовали 'myCheckBox.performClick();'? Может быть, это даст вам разные результаты? –

+1

Возможно, вы можете прочитать исходный код и достичь этого сами. –

+0

Я редактировал вопрос. – WonderCsabo

ответ

1

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

Можно окунуться в список, используя Handler для MainThread.

Handler mainHandler = new Handler(mContext.getMainLooper()); 
mainHandler.post(new Runnable() { 
    @Override 
    public void run() { 
     holder.mCheckBox.toggle(); 
    } 
}); 

Это может быть излишним, но работает для любого вида анимации, даже внутри onBindViewHolder. Я настоятельно рекомендую проверить, должна ли анимация играть заранее, или она будет играть даже при прокрутке.

0

Не знаю, насколько это будет полезно. Во всяком случае, у меня есть случай, когда мне нужно изменить состояние CheckBox после щелчка по элементу в RecyclerView. И у меня была такая же проблема с анимацией. Так что я сделал.

  • пункт щелкнул, я называю mCheckBox.toggle()
  • элемент обновления внутри списка (проверяется состояние сохраняется в элементе списка)
  • необходимо обновить адаптер (данные изменены) с помощью DiffUtil

Анимация не работает, если просто позвонить notifyDataSetChanged().

Смежные вопросы