Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Imagem Externa

Eu tenho uma imagem externa tipo: www.google.com.br/3748449.png

E quero mostrar em uma web view pois a mesma está associada a um cadastro interno

Isso é possível é isso é uma boa prática?

8 respostas
solução!

Olá Gabriel, tudo bem?

Uma das formas mais fácil de carregar uma imagem baseada em uma URL é por meio de libs que facilitam esse processamento, como é o caso do Glide ou Picasso.

Farei uma demonstração com o Glide, o código ficaria da seguinte maneira:

ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://www.google.com.br/3748449.png").into(imageView);

Veja que você pega uma referência de uma ImageView, e então, atribui pra ela o tratamento que o Glide faz, de fato é bem fácil. O único detalhe é que precisa adicioná-lo como dependência... Se fosse usar o Picasso, também precisaria adicioná-lo como dependência.

Sobre a WebView no desenvolvimento de Apps nativas não é recomendado e é considerado uma má prática sim... Então o que você pode pensar agora é: "Mas e se uma App que já exista faz uso de WebView?". Aí de fato vai ter que ter paciência e dar uma pesquisada para ver como resolver... Particularmente eu não conheço muito de WebView, pois está sendo deixada pra trás cada vez mais.

Espero ter ajudado. Abraços.

Obrigado

A justificativa do uso dá webview seria para carregar a imagem apenas

Vou entrar esse método Obrigado

Gabriel, lembrando que se tudo der certo, lembre de marcar como solução, tudo bem? ;)

Até trouxe a imagem, porém demora demais para carregar

Tem como reduzir a imagem? Isso resolve? Pois as imagens que tenho que acessar são de tamanho grande e de alta qualidade, mas meu interesse é só mostrar 100% dentro do container da tela

Oi Gabriel, sobre a demora para trazer a imagem pode ser devido ao tamanho da imagem, pois de fato ela será baixada, logo, se for uma imagem grande demorará mais tempo...

Para solucionar o probrema de recarregar você pode usar o método .skipMemoryCache() enviando um true como parâmetro. Pegando como base o exemplo que passei, ficaria da seguinte forma:

 Glide.with(this)
   .load("http://www.google.com.br/3748449.png")
   .skipMemoryCache(true)
   .into(imageView);

Esse método mantém a imagem carregada em cache da memória, portanto, vai só demorar na primeira vez.

Agora o preenchimento da tela, existem alguns métodos que podem auxiliá-lo. Como por exemplo o override() que permite editar o width e height que a imagem terá dentro do container (ImageView) junto com o centerCrop() ou fitCenter(), de fato precisa ficar testando pois vai depender muito do seu container, por exemplo:

Glide.with(this)
   .load("http://www.google.com.br/3748449.png")
   .skipMemoryCache(true)
   .override(1300, 700)
   .centerCrop()
   .into(imageView);

Era basicamente isso que você precisava?

Acho que seria legal colocar um componente de espera para o loading como exemplo um progresso bar

Tem como fazer isso até que a imagem seja carregada?

Tem sim, da pra você adicionar um por meio do XML mesmo, vou deixar um exemplo abaixo:

<RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="200dp">

            <ProgressBar 
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:visibility="visible"/>

            <ImageView
                android:id="@+id/item_image"
                android:layout_width="match_parent"
                android:layout_height="200dp" />

</RelativeLayout>

Aí na Activity, pode ser no onCreate mesmo, você faria o seguinte código:

ImageView imageView = (ImageView) findViewById(R.id.item_image);

        Glide.with(this)
                .load("http://www.google.com.br/3748449.png")
                .override(1300, 700)
                .skipMemoryCache(true)
                .centerCrop()
                .into(imageView);

Esse é um modo mais fácil de se fazer um progress para carregar uma imagem com o Glide.

Valeu