2015-10-31 14 views
0

У меня есть RatingBar:ProgressDrawable setColorFilter не работает

<RatingBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:scaleX="0.75" 
     android:isIndicator="false" 
     android:scaleY="0.75" 
     android:id="@+id/ratingBar" 
     android:stepSize="0.5" 
     android:numStars="5" /> 

и я использую цветовой фильтр, чтобы сделать рейтинг барные звезды розового цвета, как так:

ratingBar = (RatingBar) findViewById(R.id.ratingBar); 
    Drawable progressDrawable = ratingBar.getProgressDrawable(); 
    if (progressDrawable instanceof LayerDrawable) { 
     LayerDrawable stars = (LayerDrawable) progressDrawable; 
     stars.getDrawable(2).setColorFilter(getResources().getColor(R.color.ColorSecondary), PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(1).setColorFilter(getResources().getColor(R.color.ColorSecondary), PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(0).setColorFilter(getResources().getColor(R.color.ColorSecondary), PorterDuff.Mode.SRC_ATOP); 
    } 

это работает отлично подходит для всех телефонов, кроме Nexus 5 (Android версии 6.0), где 5 звезд все розовые, но заполнены по умолчанию. Даже когда я нажимаю на звезды, они не меняют цвет, все 5 остаются заполненными.

Однако, когда я делаю ratingBar.getRating(), он возвращает оценку того, где мой пользователь коснулся панели оценки, что означает, что она работает, только цветной фильтр работает неправильно.

Если я удаляю цветной фильтр, RatingBar отлично работает с цветами по умолчанию.

Не может найти решение этого в любом месте. Заранее спасибо.

ответ

1

Прошу прощения, что это не ответ, но что побуждает его устанавливать его из кода? И .setProgressDrawable должен работать, если он правильно

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@android:id/background"> 
    <shape> 
     <corners android:radius="5dip" /> 
     <gradient 
       android:startColor="#ff9d9e9d" 
       android:centerColor="#ff5a5d5a" 
       android:centerY="0.75" 
       android:endColor="#ff747674" 
       android:angle="270" 
     /> 
    </shape> 
</item> 

<item android:id="@android:id/secondaryProgress"> 
    <clip> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient 
        android:startColor="#80ffd300" 
        android:centerColor="#80ffb600" 
        android:centerY="0.75" 
        android:endColor="#a0ffcb00" 
        android:angle="270" 
      /> 
     </shape> 
    </clip> 
</item> 

<item android:id="@android:id/progress"> 
    <clip> 
     <shape> 
      <corners 
       android:radius="5dip" /> 
      <gradient 
       android:startColor="@color/progress_start" 
       android:endColor="@color/progress_end" 
       android:angle="270" 
      /> 
     </shape> 
    </clip> 
</item> 

</layer-list> 

определены и нужно более подробно о цветах ПРОГРЕСС бара фильтры проверить эту ссылку: http://ambracode.com/index/show/14297

+2

It не совсем то, что я искал, но поскольку это телефонная вещь, я не знаю, как ее решить сам. Я переключился на XML. Благодаря! :) – Mallika

5

Использование ниже один вместо getProgressDrawable() в Android 6.0

LayerDrawable ldRating = (LayerDrawable) ratingBar.getProgressDrawable(); 
ldRating.getDrawable(0).setColorFilter(getResources().getColor(R.color.rate_empty_color), PorterDuff.Mode.SRC_ATOP); 
ldRating.getDrawable(1).setColorFilter(getResources().getColor(R.color.rate_half_color), PorterDuff.Mode.SRC_ATOP); 
ldRating.getDrawable(2).setColorFilter(getResources().getColor(R.color.rate_full_color), PorterDuff.Mode.SRC_ATOP);