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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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