【发布时间】:2017-05-14 19:25:16
【问题描述】:
我有一个包含艺术家列表的 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 实际上并不是“即时”的。我找不到任何其他方式从“结束”位置开始,除了在过渡绘图本身中反转图像的起始位置。
但是,如果我这样做,开始/反向将在心脏的基础上表现不同。充其量,我需要扩展可绘制的过渡,并覆盖启动/反向/重置方法以考虑它处于哪个初始状态,这似乎有点 hacky?
我是否遗漏了一些在结束位置开始但不会导致闪烁的明显内容?
谢谢!
【问题讨论】:
标签: android android-animation transitiondrawable