2013-06-06 3 views
2

У меня есть shape в layer-list и моей целью является изменение цвета shape программно во время выполнения. У меня есть String для кода HEX, и я использовал Color.parseColor(), чтобы разобрать его, и я передал метод setColor. Всякий раз, когда я запускаю приложение, он показывает другой цвет, который я ожидаю.setColor method of GradientDrawable drawing different colour

Вот мой код для файла XML:

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


<item 
    android:id="@+id/lvbg" 
    android:top="1dp"> 
    <shape 
     android:id="@+id/listview_background" 
     android:shape="rectangle" > 
     <size 
      android:height="220dp" 
      android:width="600dp" > 
     </size> 

     <solid android:color="@android:color/black"></solid> 

     <corners android:radius="15dp" /> 
    </shape> 
</item> 
</layer-list> 

И это мой код в CustomAdapter:

convertView = mInflater.inflate(R.layout.student_info_selection_fragment_icon, null); 
holder = new ViewHolder(); 
holder.collegeBG=(LayerDrawable)convertView.getResources().getDrawable(R.drawable.rectangle); 
holder.bg = (GradientDrawable)holder.collegeBG.findDrawableByLayerId(R.id.lvbg); 
String color = "#FF" + rowItem.getCollegeColor(); 
holder.bg.setColor(Color.parseColor(color)); 

Например, когда я ставлю #FF1D0A63 я получаю черный или коричневый, совершенно разные цвета. Благодаря

+0

Что выход 'rowItem.getCollegeColor()'? –

+0

Цветовые коды в формате HEX, такие как '232323',' 1D0A63', '000000' –

+0

Когда я печатаю' color', нет проблем, я получаю ожидаемые результаты HEX. '# FF232323'' # FF1D0A63'' # FF000000' и ​​более. Я предполагаю, что проблема заключается в достижении элемента 'shape' в списке слоев. Я не уверен, правильно ли я добрался до формы. –

ответ

2

Я до сих пор не знаю, в чем проблема, но я понял, что, когда я использую layer-list в XML и назначить его в качестве фона на вид, и попытаться изменить цвет shape в layer-list я с этой проблемой ,

Так что я решил, что он отделяет мой фон shape от layer-list.

Я положил фон shape в другой файл:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listview_background" 
    android:shape="rectangle" > 

    <size 
     android:height="220dp" 
     android:width="600dp" > 
    </size> 
    <solid android:color="@android:color/black" > </solid> 
    <corners android:radius="15dp" /> 

</shape> 

И я назначил его в качестве фона на TextView.

Причина, по которой я использовал layer-list, состояла в том, чтобы объединить 2-3 формы и сделать их градиентными и дать им закругленные углы. Вместо этого я использовал View и TextView и назначил им фигуры в качестве фона, и это сработало.

Вот мой новый CustomAdapter:

convertView = mInflater.inflate(R.layout.student_info_selection_fragment_icon, null); 
holder = new ViewHolder(); 
holder.tvBackground = (TextView) convertView.findViewById(R.id.tvSelectionCollegeBackground); 
GradientDrawable background = (GradientDrawable) holder.tvBackground.getBackground(); 


String color = "#FF" + rowItem.getCollegeColor(); 
background.setColor(Color.parseColor(color)); 
holder.tvBackground.setBackground(background); 
0

попробовать этот код ...

GradientDrawable gd = new GradientDrawable(); 
gd.setShape(GradientDrawable.RECTANGLE); 
gd.setStroke(3, Color.BLUE); 
gd.setSize(w, h); 
gd.setColors(new int[]{ 
    Color.RED, 
    Color.GREEN, 
    Color.YELLOW, 
    Color.CYAN 
}); 
gd.setGradientType(GradientDrawable.LINEAR_GRADIENT);