调色板库在GridView中滚动时改变颜色

时间:2014-12-16 05:32:38

标签: android gridview palette

我在实现新的Palette库时遇到了一些问题(在4.4.4上使用'com.android.support:palette-v7:21.0.+')。我试图在GridView中为每个项目的一部分着色它工作正常但是当我从屏幕上滚动一个项目然后重新开启它会在它返回到正确的颜色之前改变为错误的颜色。

我认为每次调用getView时问题可能都是调用view.setBackgroundColor,所以我在代码之前检查了它是否已生成颜色。这使情况变得更糟。每次我滚动颜色会交换足够的滚动所有我的颜色交换的地方。看起来颜色也是相互切换的,而不是随机的。

下面是我的代码的代码片段:

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的同步和异步使用。 感谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。基本上问题是调色板对象每次都被创建,这既昂贵又不准确。由于调色板是静态的,我创建了一个ViewHolder,并在创建后将调色板存储在其中。