2015-11-02 3 views
9

Я пытаюсь использовать функцию палитры для дизайна материалов андроидов, но у меня возникают некоторые проблемы с ее применением.Android Apply Palette

Я успешно сгенерировал палитру, и теперь я пытаюсь передать палитру в функцию, которая ее применяет.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я передаю в палитру функцию 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()); 
} 
+0

попробуйте удалить функцию getRgb(). –

+0

Нет, что не помогло по-прежнему иметь ту же ошибку – Hayes121

+0

Просьба пояснить, что вы имеете в виду, когда говорите, что цветовые функции «не работают». – stkent

ответ

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(); 
    } 
+0

Спасибо за ответ, но я не хочу использовать стороннюю библиотеку – Hayes121

0

Вы пробовали в синхронном образом. Поэтому я думаю, что ниже код решит вашу проблему (по асинхронному).

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

Спасибо за предложение, я попробовал заменить мой код вашей, но все той же ошибкой – Hayes121

0

С documentation, все вызовы, которые вы используете из Palette уже возвращает значение RGB, но требуют передать цвет по умолчанию. Возможно, вы хотели использовать те, которые возвращают образец цвета вместо этого? Например, вместо этого palette.getVibrantColor().getRgb() вместо этого вы вместо этого сделаете это palette.getVibrantSwatch().getRgb(). Замените все свои получатели Цветные вызовы с соответствующим вызовом Swatch().

Кроме того, убедитесь, что у вас есть import android.support.v7.graphics.Palette в вашем импорте и что вы включаете compile 'com.android.support:palette-v7:22.1.0' в свои зависимости. Версия 22.1.0 является минимальной, поскольку вы используете Palette.Builder.

+0

Спасибо за предложение, но у меня уже были эти включенные и импортированные – Hayes121

0

Первое, что я не знаю, почему вы не получите сообщение об ошибке, когда вы пишете

palette.getVibrantColor().getRgb() 

Я предполагаю, что вы не получите сообщение об ошибке, так что вы должны использовать старую библиотеку. Как и в обновленном, он принимает один параметр как значение цвета по умолчанию. Чтобы извлечь RGB, лучше всего получить объект Palette.Swatch и получить значения RGB. Я создал небольшое рабочее простое приложение для демонстрации того, как использовать улучшенную библиотеку, вы можете проверить это here. Надеюсь это поможет.