Android Apply Palette

时间:2015-11-02 10:47:20

标签: android android-palette

我正在尝试使用androids材料设计的调色板功能,但我在应用它时遇到了一些麻烦。

我已经成功生成了调色板,现在我正在尝试将调色板传递给应用它的函数。

我遇到的问题是,当我将调色板传递给applyPalette函数时,没有任何方法(例如palette.getDarkMutedColor().getRgb() , palette.getVibrantColor().getRgb())填充调色板中的值。

我正在关注的教程没有提及其他任何事情,然后将调色板传递给函数,并且这样做将填充方法

这是生成器函数和应用函数,任何人都能看出为什么这不起作用?

代码

private void colorize(Bitmap photo) {
    Palette palette = new Palette.Builder(photo).generate();
    applyPalette(palette);
}

private void applyPalette(Palette palette) {
    getWindow().setBackgroundDrawable(new ColorDrawable(palette.getDarkMutedColor().getRgb()));

    TextView titleView = (TextView) findViewById(R.id.title);
    titleView.setTextColor(palette.getVibrantColor().getRgb());

    TextView descriptionView = (TextView) findViewById(R.id.description);
    descriptionView.setTextColor(palette.getLightVibrantColor().getRgb());

    colorRipple(R.id.info, palette.getDarkMutedColor().getRgb(),
            palette.getDarkVibrantColor().getRgb());
    colorRipple(R.id.star, palette.getMutedColor().getRgb(),
            palette.getVibrantColor().getRgb());

    View infoView = findViewById(R.id.information_container);
    infoView.setBackgroundColor(palette.getLightMutedColor().getRgb());

    AnimatedPathView star = (AnimatedPathView) findViewById(R.id.star_container);
    star.setFillColor(palette.getVibrantColor().getRgb());
    star.setStrokeColor(palette.getLightVibrantColor().getRgb());
}

4 个答案:

答案 0 :(得分:1)

使用picassopalette第三方库并将其导入您的项目,然后使用以下代码:

try {
        ContextWrapper cw = new ContextWrapper(OtherUserProfileScreenActivity.this);
        Picasso.with(this).load(image + ".jpg").placeholder(R.drawable.ic_loading).error(R.drawable.ic_error).into(imageView, PicassoPalette.with(Image + ".jpg", imageView).use(PicassoPalette.Profile.MUTED_DARK).intoCallBack(new BitmapPalette.CallBack() {
            @Override
            public void onPaletteLoaded(Palette palette) {

                int mutedColor = palette.getMutedColor(R.attr.colorPrimary);
                mCollapsingToolbarLayout.setContentScrimColor(mutedColor);
            }
        }));
    } catch (OutOfMemoryError e) {
        e.printStackTrace();
        System.gc();
    }

答案 1 :(得分:0)

您已尝试过同步方式。所以我认为下面的代码将解决你的问题(以异步方式)。

private void colorize(Bitmap photo) {   
Palette.from(photo).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                applyPalette(palette);
            }
        });
}

答案 2 :(得分:0)

documentation开始,您在Palette中使用的所有呼叫都已返回RGB值,但需要传递默认颜色。也许您打算使用那些返回颜色样本的?例如,代替执行此palette.getVibrantColor().getRgb()而不是执行此操作palette.getVibrantSwatch().getRgb()。使用相应的get Swatch()调用替换所有get Color调用。

另外,请确保导入中包含import android.support.v7.graphics.Palette,并在依赖项中包含compile 'com.android.support:palette-v7:22.1.0'。当您使用Palette.Builder时,版本22.1.0是最小的。

答案 3 :(得分:0)

首先我不知道为什么你在写作时没有收到错误

palette.getVibrantColor().getRgb()

我会假设您没有收到错误,因此您必须使用旧库。与更新版本一样,它接受一个参数作为默认颜色值。 要提取RGB更好的方法是获取Palette.Swatch对象并获取RGB值。 我确实创建了一个小型工作简单应用程序来演示如何使用改进的库,您可以检查here。希望这会有所帮助。