Alterando a fonte do ImageView

257

Eu tenho um ImageViewcom uma imagem de origem definida no xml usando a seguinte sintaxe:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

Agora, preciso alterar essa imagem programaticamente. O que eu preciso fazer é excluir a imagem antiga e adicionar uma nova. O que eu fiz é o seguinte:

myImgView.setBackgroundResource(R.drawable.monkey);

Funciona, mas notei que o Android empilha a nova imagem em cima da antiga (não me pergunte como eu descobri que não é relevante para a discussão :). Definitivamente, preciso me livrar da antiga antes de definir a nova imagem.

Como posso conseguir isso?

nourdine
fonte

Respostas:

635

Alterando a fonte do ImageView:

Usando o setBackgroundResource()método:

  myImgView.setBackgroundResource(R.drawable.monkey);

você está colocando esse macaco em segundo plano.

Sugiro o uso do setImageResource()método:

  myImgView.setImageResource(R.drawable.monkey);

ou com o setImageDrawable()método:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

*** Com a nova API do Android 22, getResources().getDrawable()agora está obsoleta. Este é um exemplo de como usar agora:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

e como validar para versões antigas da API:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}
Jorgesys
fonte
ah legal ... infelizmente acabei de descobrir que também preciso substituir uma imagem definida por myImgView.setImageDrawable (img); o código que você sugeriu myImgView.setImageResource (R.drawable.monkey); não é capaz de fazê-lo. como posso me livrar do drawable antes de renderizar o macaco? :) muito obrigado
Nourdine
1
O getDrawable (int) agora está obsoleto e o getDrawable (int, tema) foi adicionado na API-21. Agora o que fazer? Você pode atualizar sua resposta?
Muben
A chamada requer o nível 16 da API (o mínimo atual é 13): android.widget.ImageView#setBackground
Iman
ContextCompatpara ficar getTheme
empatado
50

Você deveria usar em setImageResourcevez de setBackgroundResource.

David Hedlund
fonte
4
Comparação dos dois
Suragch 06/04/19
32
myImgView.setImageResource(R.drawable.monkey);

é usado para definir a imagem na visualização de imagem atual, mas se você quiser excluir essa imagem, poderá usar este código como:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

Agora, isso excluirá a imagem da visualização da imagem, porque definiu o valor dos recursos como zero.

PIR FAHIM SHAH
fonte
18

obter o ID do ImageView como

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

então use

imgFp.setImageResource(R.drawable.fpscan);

para definir a imagem de origem programaticamente em vez de XML.

Neha Shukla
fonte
8

Ou tente este. Para mim, está funcionando bem:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
radu_paun
fonte
5

Resposta visual suplementar

ImageView: setImageResource()(método padrão, relação de aspecto é mantida)

insira a descrição da imagem aqui

View: setBackgroundResource()(a imagem está esticada)

insira a descrição da imagem aqui

Ambos

insira a descrição da imagem aqui

Minha resposta mais completa está aqui .

Suragch
fonte
3

Se você deseja definir na visualização de imagem uma imagem que esteja dentro dos diretórios do mipmap, faça o seguinte:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)

CommonSenseCode
fonte
2

Basta escrever um método para alterar a visualização de imagem

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
BAIXO
fonte