2016-06-27 3 views
0

У меня есть ImageButton, у которого есть ресурс фона, который имеет овальную форму.Изменить BackgroundTint ImageView на Android

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:angle="270" 
     android:color="#FFFF0000" /> 

</shape> 

Вот ImageButton в XML:

<ImageButton 
      android:id="@+id/c1" 
      android:layout_width="70dp" 
      android:layout_height="70dp" 
      android:layout_columnSpan="1" 
      android:layout_rowSpan="1" 
      android:background="@drawable/circle" 
      android:layout_margin="10dp" 
      /> 

мне нужно изменить цвет формы круга динамически, это будет сделано либо изменить свойство backgroundTint в ImageButton или изменить цвет формы круга.

ПРИМЕЧАНИЕ: У меня есть массив строк, в котором хранится список цветов RGB. Мне нужно использовать эти цвета RGB.

ответ

1

я только что нашел ответ, он работает следующим образом: В моей changeColors функция (интермедиат идентификатор)

  • Создать переменную ImageButton.
  • Назначить переданный идентификатор переменной ImageButton.
  • Определите переменную GradientDrawable, чтобы сохранить фон ImageButton.
  • Обновите цвет фона, используя переменную GradientDrawable.
  • Обновите ImageButton на новый фон.

Это код:

ImageButton circle; 
     circle = (ImageButton) findViewById(id); 
     GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.circle); 
     drawable.setColor(Color.parseColor("color in format #FFFFFF"); 
     circle.setBackground(drawable); 
1

Вы можете сделать это следующим образом:

mImageView.setBackgroundTintList(getResources().getColorStateList(R.color.my_color)); 

Или вы можете сделать лучше, чтобы поддержать релизах до Lollipop:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
{ 
    ColorStateList stateList = ColorStateList.valueOf(getResources().getColor(R.color.my_color)); 
    mImageView.setBackgroundTintList(stateList); 
} 
else 
{ 
    mImageView.getBackground().getCurrent().setColorFilter(
      new PorterDuffColorFilter(getResources().getColor(R.color.my_color), 
      PorterDuff.Mode.MULTIPLY)); 
} 

Подробнее о PorterDuffColorFilter here.

+0

есть способ передать RGB цвет в виде строки вместо GetResources() getColorStateList (R.color.my_color).? , потому что у меня есть список RGB, хранящийся в массиве строк, я должен использовать их – Omar

+0

@Omar, вам лучше преобразовать эти цвета RGB в int и передать его методу 'getColorStateList (int)'. – rogcg

+0

спасибо, я использовал другой метод, я его разместил, ценю вашу помощь – Omar

Смежные вопросы