Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mudar a cor de um drawable em tempo de execução.

Boa noite, estou tentando mudar em tempo de execução a cor de fundo de um elemento, porém, está saindo de uma maneira bem estranha.

Meu drawable:

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

    <size
        android:width="120dp"
        android:height="120dp"/>

</shape>

A minha classe que representa um item do meu Recycler view:

    class ColorViewHolder extends RecyclerView.ViewHolder{

        final ImageView imageView;
        private Context context;

        ColorViewHolder(@NonNull View itemView, Context context) {
            super(itemView);
            this.imageView = itemView.findViewById(R.id.color_view);
            this.context = context;
        }

        void bind(Color color) {
            Drawable drawable = imageView.getBackground();
            drawable.setColorFilter(color.getColorId(), PorterDuff.Mode.MULTIPLY);
        }
    }

Meu layout que representa cada item da recycler view:

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:id="@+id/color_view"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_margin="10dp"
        android:background="@drawable/circle"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:contentDescription="TODO" />

</android.support.constraint.ConstraintLayout>

Meu problema é que quando a app é executada, as cores ficam todas em um tom de cinza escuro, acredito que estou setando a cor de uma maneira errada, alguém teria alguma idéia do que pode estar acontecendo?

Obrigado!

1 resposta
solução!

Olá!

Qual a cor que sua Activity está enviando, quando chama o bind do seu Holder? No parâmetro color?

Pelo que vc indica no problema, pode ser um cinza claro. Mas com o parâmetro MULTIPLY, que vc seta no Filtro, ele vai ficar escuro. Veja a referencia na documentação: https://developer.android.com/reference/android/graphics/PorterDuff.Mode

Talvez, setando um outro filtro, ou retirando o filtro, fica melhor.

Qual é o resultado esperado?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software