我有一个包含艺术家列表的 RecyclerView。艺术家可以被标记为收藏或不收藏。
有一颗心来表示这种状态,我有一个可绘制的过渡图,根据相关艺术家是否被标记为收藏夹,我将从一个勾勒出的心形变为填充的心形。当用户单击心脏时,动画本身可以正常工作并且在两者之间平滑过渡,并且看起来很漂亮。
TransitionDrawable td = new TransitionDrawable(new Drawable[]{
ContextCompat.getDrawable(getActivity(), R.drawable.favorite_border),
ContextCompat.getDrawable(getActivity(), R.drawable.favorite)});
artistViewHolder.image.setImageDrawable(td);
if (artist.isFavorite()) {
td.startTransition(0);
}
在项目的 onClick 中,我根据下一个状态调用 .reverseTransition(300) 或 .startTransition(300)。
每当创建视图(第一个屏幕加载)时我都会遇到问题,我需要从第二个位置开始(最喜欢的)。即使我的动画时间在创建时设置为 0,您也可以看到初始负载从空心到填充心闪烁。每当列表无效时也会发生这种情况,例如如果它被过滤到更小的艺术家集合中。
我想因为它需要做一些事情并且实际上不仅仅是设置可绘制对象,所以 0 实际上并不是“即时”的。我找不到任何其他方式从“结束”位置开始,除了在过渡可绘制本身中反转图像的起始位置。
但是,如果我这样做,开始/反向将在心脏的基础上表现不同。充其量,我需要扩展可绘制的过渡,并覆盖启动/反向/重置方法以考虑它所处的初始状态,这似乎有点骇人听闻?
我是否遗漏了一些明显的东西,从结束位置开始但不会导致闪烁?
谢谢!