我在实现新的 Palette 库时遇到了一些问题(在 4.4.4 上,'com.android.support:palette-v7:21.0.+'
)。我正在尝试为 GridView 中每个项目的一部分着色,效果很好,但是当我将一个项目从屏幕上滚动然后返回时,它会在恢复到正确颜色之前会更改为错误的颜色一段时间。
我以为这个问题可能是在调用view.setBackgroundColor
每次调用 getView 时,我都会在代码之前检查它是否已经生成了颜色。这让情况变得更糟。每次我滚动时,颜色都会交换随着足够的滚动,我所有的颜色都交换了位置。看起来颜色也在相互切换,而不是随机的。
这是我的代码的一个片段:
Palette.generateAsync(bitmap,
new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant =
palette.getMutedSwatch();
if (vibrant != null) {
fView.findViewById(R.id.colored_bar).setBackgroundColor(
vibrant.getRgb());
}
}
});
有谁知道解决这个问题的方法?我听说要缓存 Palette 的响应,但不确定这是否意味着我要做的事情比我现在要做的更多。我还尝试了 Palette 的同步和异步使用。
谢谢。
我找到了解决这个问题的方法。基本上问题是每次都会创建调色板对象,这既昂贵又不准确。由于调色板是静态的,我创建了一个 ViewHolder 并在创建调色板后将其存储在其中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)