调色板(Android支持v22)不生成色板

时间:2015-05-12 11:09:31

标签: java android android-activity android-5.0-lollipop palette

首先,我从未使用Palette,当我想从它开始时,我看到所有的教程和博客都谈论的是v21而不是v22。

我的问题是我有一个Swatch(在swatch的数组[palette.getSwatches()。get(0)]的位置0),它总是返回黑色(标题和正文),这是一个例子,因为我正在使用这可能是错的,但我正在复制https://developer.android.com/reference/android/support/v7/graphics/Palette.html

        Palette.from(BitmapFactory.decodeResource(getResources(),R.drawable.prueba2)).generate(new Palette.PaletteAsyncListener() {
        @Override
        public void onGenerated(Palette palette) {
            text.setTextColor(palette.getVibrantSwatch().getBodyTextColor());
            text.setBackgroundColor(palette.getVibrantSwatch().getTitleTextColor());
        }
    });

当我启动这个应用程序(我有一个带有textView和ImageView的活动)时,它会关闭这个

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v7.graphics.Palette$Swatch.getBodyTextColor()' on a null object reference
        at com.alfondo.projectpalette.MainActivity.onCreate(MainActivity.java:33)"
编辑:这是我的绘画。 (我不能发布imgs)http://imgur.com/YGV9xVS

3 个答案:

答案 0 :(得分:1)

首先创建图像的位图然后使用毕加索调色板获取图像颜色并将该颜色设置为可折叠工具栏

  // get bitmap of image and generate toolbar color by passing bitmap to palette


     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nature);
                Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
        // get muted color from bitmap using palette and set this to collapsible toolbar

        @Override
                    public void onGenerated(Palette palette) {
                        collapsingToolbarLayout.setContentScrimColor(palette.getMutedColor(getResources().getColor(R.color.colorPrimary)));
                            collapsingToolbarLayout.setStatusBarScrimColor(palette.getMutedColor(getResources().getColor(R.color.colorPrimaryDark)));
                        }
                    });

答案 1 :(得分:0)

只检查托盘是否为空

 public void onGenerated(Palette palette) {
        if(palette!=null){
            text.setTextColor(palette.getVibrantSwatch().getBodyTextColor());
            text.setBackgroundColor(palette.getVibrantSwatch().getTitleTextColor());
        }
}

答案 2 :(得分:0)

在将颜色分配给视图之前,只需检查样本是否为空而不是调色板

Palette.from(BitmapFactory.decodeResource(getResources(),R.drawable.prueba2).generate(new Palette.PaletteAsyncListener() {
      public void onGenerated(Palette palette) {
           Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
           if(vibrantSwatch != null){
              text.setTextColor(vibrantSwatch.getBodyTextColor());
              text.setBackgroundColor(vibrantSwatch.getTitleTextColor())
           }
      }
});